답변:
cygwin 용 procps 라이브러리를 설치해야합니다. 여기에는 최상위 프로그램이 포함되지만 cygwin에서 실행중인 프로세스 만 나열됩니다. Windows에서 실행중인 모든 프로세스를 보려면이 답변을 참조하십시오 : https://stackoverflow.com/questions/3503681/cygwin-top-command-see-processes-for-all-users
다음과 같은 것을 할 수있는 것 같습니다.
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
사용자 및 커널 모드 시간은 1 / 10,000,000 초로 표시됩니다.
초당 CPU 사용량을 얻기 위해 해당 출력을 사후 처리 할 수 있어야합니다.
여기 cygwin을 사용하십시오 perl
:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1 |
perl -lne '
if (/\S/) {
my ($k,$c,$p,$u) = split /\s{2,}/;
$n{"$p\t$c"}=$k+$u;
} else {
my %c;
for my $k (keys %n) {
$c{$k} = $n{$k} - $o{$k} if defined $o{$k}
}
print "$_\t" . $c{$_}/1e5 for (sort {$c{$b}<=>$c{$a}} keys %c)[0..20];
%o = %n; %n = undef; print ""
}'
다음과 같은 결과가 출력됩니다.
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
매 초.
유휴 시스템 에서 시스템 유휴 프로세스 가 800 % 미만으로 표시되면 시스템에 8 개의 CPU 코어 (최소 8 개의 스레드)가 있기 때문에 모든 CPU의 CPU 시간을 계산하기 때문입니다.
또한 EVERY:1
위의 거짓말입니다. wmic
매 초마다 그 출력을주는 것 같지 않습니다. 각 보고서간에 약 1 초 정도 대기하며 보고서를 계산하는 데 걸리는 시간을 보상하지 않습니다. 실제로 실제로 1 초마다 조금씩 실행되므로 백분율이 매우 정확하지 않고 약간 과대 평가되었습니다.
top
), 시도 프로세스 탐색기