2010-08-17 11 views
24

Czy ktoś wie, jak wyświetlić procesy dla wszystkich użytkowników korzystających z polecenia top w Cygwin (część biblioteki procps w systemie).Cygwin top command - Zobacz procesy dla wszystkich użytkowników

Wiem, że można to zrobić w * nix, ale walczę w Cygwin. Próbowałem używać pslist, ale nie zachowuje się w konsoli SSH putty.

Potrzebuję rozwiązania, w którym widzę okno dialogowe w stylu podobnym do SSH. Nie mam żadnego dostępu NTLM SSO do gościa Win2k3, więc ssh jest jedynym sposobem.

+0

Po wielu latach pracy z Cygwin w kółko zacząłem używać ProcessExplorer i Windows 7+ wbudowanych w Monitor zasobów. Bardzo podoba mi się oba, ale udało mi się odkryć, że Monitor Procesu jest doskonałym narzędziem do inspekcji procesów, które bardzo mocno uderzają we wesele pliku. –

+0

Jak używać 'PROCEXP.EXE' lub' PROCMON.EXE' zamiast 'ssh'? Czy mają tryb terminalowy? –

Odpowiedz

32

top wyświetla tylko procesy Cygwin. ps -W wyświetli również listę procesów systemu Windows.

+1

Poniższy link przedstawia jedną stronę: http://superuser.com/questions/751688/is-there-a-way-to-show-windows-processes-in-cygwin-constantly/887564#887564 – philwalk

+0

Albo '-W 'lub' --windows' działa, patrz 'ps --help' – Timo

3

Wiele razy polecenie "lista zadań" zapewnia bardziej efektywną pracę. Został wbudowany w okna, upewnij się tylko, że twój folder System32 jest częścią Twojej zmiennej PATH profilu bash. Jest też sam procps. Powinieneś też spróbować użyć menty na terminalu. Zawsze możesz spróbować dołączyć jedną z tych aplikacji zadań do ekranu i lub używając zegarka do odpytywania informacji.

+0

Dzięki. 'TASKLIST/FO CSV/NH' podaje czas procesora procesora (od startu) z drugą szczegółowością w parsowalny sposób, więc można uruchomić to dwukrotnie w odstępie 100 sekund, aby uzyskać przybliżony obraz największych długotrwałych procesów użycia procesora. –

2

Wydaje można zrobić coś takiego:

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

użytkownika i trybu jądra czasy nie wydają się być wyrażona w 1/10,000,000th sekundy.

Powinieneś być w stanie postprocesować to wyjście, aby uzyskać zużycie procesora na sekundę.

Tutaj użyciu cygwin na 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 "" 
    }' 

wyjść coś takiego:

0  System Idle Process  588.12377 
2196 sh.exe 107.00075 
248  svchost.exe  85.80055 
7140 explorer.exe 26.52017 
[...] 

każda sekunda.

Należy zauważyć, że jeśli proces bezczynności systemu pokazuje w systemie bezczynności poniżej 800%, dzieje się tak dlatego, że system ma 8 rdzeni procesora (a przynajmniej 8 wątków), ponieważ zlicza czas procesora dla wszystkich procesorów.

Należy również zauważyć, że powyższy EVERY:1 jest kłamstwem. wmic wydaje się nie dawać tego wyjścia co sekundę. Bardziej prawdopodobne jest, że śpi około 1 sekundy pomiędzy każdym raportem i nie rekompensuje czasu potrzebnego na obliczenie raportu. Tak więc w praktyce będzie działał co 1 sekundę i trochę, co oznacza, że ​​te wartości procentowe nie są zbyt dokładne i nieco przeszacowane.

Powiązane problemy