加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Perl进程解析

发布时间:2020-12-14 01:04:35 所属栏目:Linux 来源:网络整理
导读:我在perl的 linux机器上循环进程.我想显示特定进程的总cpu,但我想显示进程的每个实例的总用量.例如: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDnorthriv 10228 0.0 0.2 23692 8084 ? S Sep18 0:00 /usr/local/apache2/bin/httpd -k startnort
我在perl的 linux机器上循环进程.我想显示特定进程的总cpu,但我想显示进程的每个实例的总用量.例如:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
northriv 10228  0.0  0.2  23692  8084 ?        S    Sep18   0:00 /usr/local/apache2/bin/httpd -k start
northriv 10229  0.0  0.2  23692  8084 ?        S    Sep18   0:00 /usr/local/apache2/bin/httpd -k start
northriv 10186  0.0  0.2  23692  8084 ?        S    Sep18   0:00 /usr/local/apache2/bin/httpd -k start
northriv 10187  0.0  0.2  23692  8084 ?        S    Sep18   0:00 /usr/local/apache2/bin/httpd -k start
speaktra 25535  0.2  1.0  46788 33212 ?        S    Sep23   6:04 /usr/local/apache2/bin/httpd -k start
speaktra 25547  0.2  0.8  40320 26712 ?        S    Sep23   6:21 /usr/local/apache2/bin/httpd -k start
wvneuroc  1570  0.2  0.0   2136  1044 ?        S    12:52   0:00 /usr/bin/qpopper -F -S
speaktra 25546  0.2  0.7  35680 22116 ?        S    Sep23   6:45 /usr/local/apache2/bin/httpd -k start
speaktra 1570  0.2  0.0   2136  1044 ?        S    12:52   0:00 /usr/bin/qpopper -F -S

这样的东西将由用户和这样的过程输出.

northriv
(0.0): /usr/local/apache2/bin/httpd

speacktra
(0.6): /usr/local/apache2/bin/httpd
(0.2): /usr/bin/qpopper -F -S

wvneuroc
(0.2): /usr/bin/qpopper -F -S

我知道我需要使用某种类型的哈希但不强大,这是我目前使用的代码.

!/usr/bin/perl
use strict;
use warnings;

my @stats;
my $date=`date +"%m-%d-%Y-%r"`;
chomp $date;

my @process_table = `ps aux --sort=%cpu|sed -e 's/s+/,/g'`;
for (@process_table)
{       chomp;
        $_ =~ s/        / /g;
        my ($user,$pid,$cpu,$mem,$cmd)=(split /,/,$_)[0,1,2,3,10];
        next if $user eq 'USER';
        if($cpu > 10)
        {
                push(@stats,"$user - WARNING(CPU:$cpu):t$pid($cmd)n");
        }
        if($cpu > 50)
        {
                push(@stats,"$user - CRITICAL(CPU:$cpu):t$pid($cmd)n");
        }
}
print $_ for @stats;

解决方法

我在您的代码中添加了%users hash-of-hashes.另见: perldoc perldsc

use warnings;
use strict;

my @stats;
my $date=`date +"%m-%d-%Y-%r"`;
chomp $date;

my %users;
my @process_table = `ps aux --sort=%cpu|sed -e 's/s+/,10];
        next if $user eq 'USER';
        $users{$user}{$cmd} += $cpu;
        if($cpu > 10)
        {
                push(@stats,"$user - CRITICAL(CPU:$cpu):t$pid($cmd)n");
        }
}
print $_ for @stats;
for my $user (sort keys %users) {
    print "$usern";
    print "($users{$user}{$_}): $_n" for (sort keys %{ $users{$user} });
    print "n";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读