Cygwin에서 Windows 프로세스를 지속적으로 표시하는 방법이 있습니까


13

top 또는 variant를 사용하여 cygwin 쉘에서 프로세스를 모니터링하고 싶습니다. 그 이유는 실시간보고 및 지속적인 업데이트 때문입니다. 그러나 cygwin에서 top은 Windows 프로세스에 대해보고하지 않습니다.

Teh 포럼 ps -W은 대안으로 사용하는 것이 좋았지 만, 더 이상 실시간 정보를 제공하지 않고 명령을 입력 할 때마다 정적 스냅 샷 만 있다는 단점이 있습니다.

topcygwins 프로세스뿐만 아니라 모든 프로세스를 표시하기 위해 cygwin에서 작업 할 수있는 방법이 있습니까?


1
Cygwin에 기반을 두어야 할 이유가 있습니까? 그냥 (같은 표 형식으로 윈도우 실행중인 프로세스에 대한 데이터의 자세한 목록을 제공 무언가를 원하는 경우 top), 시도 프로세스 탐색기
다스 안드로이드

답변:


12

bash 쉘에서 다음 명령 행을 사용하여 모든 Windows 프로세스를 모니터 할 수 있습니다.

watch "ps -W" # pipe to grep for filtering

예를 들어, 모든 Java 프로세스를 보려면

watch "ps -W | grep java"

"ps -W"는 cygwin 및 non-cygwin 프로세스를 모두 나열합니다.


하나 ps -W또는 ps --windows작업 참조ps --help
티모


1

다음과 같은 것을 할 수있는 것 같습니다.

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 초마다 조금씩 실행되므로 백분율이 매우 정확하지 않고 약간 과대 평가되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.