2010-08-17 6 views
24

Est-ce que quelqu'un sait comment voir les processus pour tous les utilisateurs en utilisant la commande top dans Cygwin (partie de la bibliothèque procps sous Système). Je sais que cela peut être fait dans * nix mais je me bats dans Cygwin. J'ai essayé d'employer pslist mais il ne se comporte pas dans une console de mastic de SSH.Cygwin top commande - Voir les processus pour tous les utilisateurs

J'ai besoin d'une solution où je peux voir une boîte de dialogue similaire à top utilisant SSH. Je n'ai aucun accès NTLM SSO à l'invité Win2k3 du tout, donc ssh est la seule façon d'entrer.

+0

Après plusieurs années passées à travailler avec Cygwin, je me suis orienté vers l'utilisation de ProcessExplorer et de Windows 7+ intégré à Resource Monitor. J'aime vraiment les deux et j'ai trouvé que Process Monitor est un excellent outil pour inspecter les processus qui frappent très lourdement les E/S de fichiers. –

+0

Comment utilisez-vous 'PROCEXP.EXE' ou' PROCMON.EXE' sur 'ssh'? Ont-ils un mode terminal? –

Répondre

32

top affiche uniquement les processus Cygwin. ps -W listera également les processus Windows.

+1

Le lien suivant montre un sens: http://superuser.com/questions/751688/is-there-a-way-to-show-windows-processes-in-cygwin-constantly/887564#887564 – philwalk

+0

Soit '-W 'ou' --windows' fonctionnent, voir 'ps --help' – Timo

3

Souvent, la commande "tasklist" fait le travail plus efficacement. Il construit dans Windows, assurez-vous simplement que votre dossier System32 fait partie de votre profil bash PATH. Il y a aussi procps lui-même. Vous devriez également essayer d'utiliser mintty pour votre terminal. Vous pouvez toujours essayer d'attacher l'une de ces applications de tâche à l'écran et/ou utiliser la montre pour interroger l'information.

+0

Merci. 'TASKLIST/FO CSV/NH' vous donne le temps processeur (depuis le début) avec une deuxième granularité de façon analysable, donc on peut l'exécuter deux fois avec un intervalle de 100 secondes pour avoir une idée approximative des plus grands processus d'utilisation du CPU. –

2

Il semble que vous pouvez faire quelque chose comme:

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

L'utilisateur et le mode noyau fois il semble être exprimé en 1/10000000ème de seconde.

Vous devriez pouvoir post-traiter cette sortie pour obtenir l'utilisation du processeur par seconde.

ici en utilisant Cygwin de 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 "" 
    }' 

Sorties quelque chose comme:

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

chaque seconde.

Notez que si le processus inactif du système montre un peu moins de 800% sur un système de ralenti, c'est parce que votre système dispose de 8 cœurs de processeur (bien au moins 8 fils) comme qui compte le temps CPU de toutes les unités centrales.

Notez également que le EVERY:1 ci-dessus est un mensonge. wmic ne semble pas donner cette sortie toutes les secondes. Plus probablement, il dort environ 1 seconde entre chaque rapport et ne compense pas le temps qu'il faut pour calculer le rapport. Donc, en pratique, il fonctionnera toutes les secondes et un peu, ce qui signifie que ces pourcentages ne sont pas très précis et légèrement surestimés.

Questions connexes