Чи є спосіб постійно показувати процеси Windows у Cygwin


13

Я хотів би відстежувати процеси із оболонки cygwin, використовуючи вершину чи варіант. Причиною цього є його звітність у реальному часі та постійні оновлення. Однак під cygwin топ не звітуватиме про процеси Windows.

На форумах, які я рекомендував використовувати ps -Wяк альтернативу, але це, очевидно, є недоліком - це більше не дає мені інформації в режимі реального часу, а лише статичний знімок кожного разу, коли я ввожу команду.

Чи є спосіб зайнятися topроботою в Cygwin, щоб відобразити всі мої процеси, а не лише процеси cygwins?


1
Чи є причина, що саме вона має базуватися в Cygwin? Якщо ви просто хочете щось, що надає детальний перелік даних про запущені процеси Windows у табличному форматі (наприклад top), спробуйте Process Explorer
Darth Android

Відповіді:


12

З bash shell ви можете відстежувати всі процеси Windows за допомогою цього командного рядка:

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

Щоб побачити всі процеси Java, наприклад:

watch "ps -W | grep java"

Зауважте, що "ps-W" перераховує як процеси cygwin, так і не cygwin.


Або ps -Wчи ps --windowsроботи, дивps --help
Timo

2

Потрібно встановити бібліотеку propps для cygwin, сюди входить провідна програма, однак вона буде перераховувати лише процеси, що працюють у cygwin. Якщо ви хочете побачити всі процеси, що працюють у Windows, зверніться до цієї відповіді: /programming/3503681/cygwin-top-command-see-process-for-all-users


1

Здається, ви можете зробити щось на кшталт:

wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1

Часи режиму "Користувач" та "Ядро", схоже, виражаються в 1/1000000000 секунди.

Ви повинні мати можливість обробляти цей вихід, щоб отримати використання процесора за секунду.

Тут за допомогою 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
[...]

кожна секунда.

Зауважте, що якщо System Idle Process показує трохи менше 800% в режимі очікування, це тому, що у вашій системі є 8 ядер процесора (ну, принаймні, 8 потоків), як це враховує час процесора всіх процесорів.

Також зауважте, що EVERY:1вищезгадане - брехня. wmicсхоже, не дає цього висновку щосекунди. Швидше за все, він проходить приблизно 1 секунду між кожним звітом і не компенсує час, необхідний для обчислення звіту. Тож на практиці вона працюватиме кожні 1 секунду і трохи, а це означає, що ці відсотки не дуже точні і трохи завищені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.