Когда вы хотите контролировать указанный процесс, обычно это делается с помощью сценариев. Вот пример Perl. Это ставит проценты так же, как и top, сбрасывая его на один процессор. Затем, когда какой-то процесс активно работает с двумя потоками, загрузка процессора может превышать 100%. Специально посмотри, как подсчитываются ядра процессора: D
тогда позвольте мне показать мой пример:
#!/usr/bin/perl
my $pid=1234; #insert here monitored process PID
#returns current process time counters or single undef if unavailable
#returns: 1. process counter , 2. system counter , 3. total system cpu cores
sub GetCurrentLoads {
my $pid=shift;
my $fh;
my $line;
open $fh,'<',"/proc/$pid/stat" or return undef;
$line=<$fh>;
close $fh;
return undef unless $line=~/^\d+ \([^)]+\) \S \d+ \d+ \d+ \d+ -?\d+ \d+ \d+ \d+ \d+ \d+ (\d+) (\d+)/;
my $TimeApp=$1+$2;
my $TimeSystem=0;
my $CpuCount=0;
open $fh,'<',"/proc/stat" or return undef;
while (defined($line=<$fh>)) {
if ($line=~/^cpu\s/) {
foreach my $nr ($line=~/\d+/g) { $TimeSystem+=$nr; };
next;
};
$CpuCount++ if $line=~/^cpu\d/;
}
close $fh;
return undef if $TimeSystem==0;
return $TimeApp,$TimeSystem,$CpuCount;
}
my ($currApp,$currSys,$lastApp,$lastSys,$cores);
while () {
($currApp,$currSys,$cores)=GetCurrentLoads($pid);
printf "Load is: %5.1f\%\n",($currApp-$lastApp)/($currSys-$lastSys)*$cores*100 if defined $currApp and defined $lastApp and defined $currSys and defined $lastSys;
($lastApp,$lastSys)=($currApp,$currSys);
sleep 1;
}
Надеюсь, это поможет вам в любом мониторинге. Конечно, вы должны использовать scanf или другие функции C для преобразования любых регулярных выражений perl, которые я использовал в источник C
Конечно 1 секунда для сна не обязательна. Вы можете использовать в любое время. В результате вы получите среднюю нагрузку за указанный период времени. Когда вы будете использовать его для мониторинга, конечно, последние значения вы должны выставить наружу. Это необходимо, потому что мониторинг обычно вызывает скрипты периодически, и скрипт должен завершить свою работу как можно скорее.