linux - Perl 进程解析

标签 linux perl

我正在 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;

最佳答案

你应该使用 P9Y::ProcessTable此任务的模块。

关于linux - Perl 进程解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010968/

相关文章:

linux - 如何检查条件,然后使用 awk 在条件行之前的行中打印特定字段?

linux - 在linux shell中访问奇怪的目录

linux - Ctrl-p 和 Ctrl-n 在 Docker 下的行为异常

perl - 返回具有单个元素的数组或列表时的列表或标量上下文

perl - 在 Perl 中,如何获得多个集合的笛卡尔积?

perl - 从 perl 运行/usr/bin/time

linux - CentOS 和 fontconfig : Cannot load default config file

linux - git 说一切都是最新的

docker - `make install`在Docker内部失败

perl - 强制本地安装的模块使用本地安装的依赖项