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"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |