Existe-t-il un moyen d'afficher constamment les processus Windows dans Cygwin


13

Je voudrais surveiller les processus à partir d'un shell cygwin, en utilisant top ou une variante. La raison en est ses rapports en temps réel et ses mises à jour constantes. Cependant, sous cygwin, top ne rendra pas compte des processus Windows.

Les forums que je recommande d'utiliser ps -Wcomme alternative, mais cela a évidemment l'inconvénient de ne plus me donner d'informations en temps réel, mais juste un instantané statique chaque fois que je tape la commande.

Existe-t-il un moyen de toptravailler dans cygwin pour afficher tous mes processus et pas seulement les processus cygwins?


1
Y a-t-il une raison pour laquelle il doit être basé spécifiquement sur Cygwin? Si vous voulez juste quelque chose qui fournit une liste détaillée des données sur l'exécution des processus Windows dans un format tabulaire (comme top), essayez Process Explorer
Dark Android

Réponses:


12

Depuis un shell bash, vous pouvez surveiller tous les processus Windows avec cette ligne de commande:

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

Pour voir tous les processus java, par exemple:

watch "ps -W | grep java"

Notez que "ps -W" répertorie les processus cygwin et non cygwin.


Soit ps -Wou ps --windowstravailler, voirps --help
Timo


1

Il semble que vous puissiez faire quelque chose comme:

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

Les temps des modes utilisateur et noyau semblent y être exprimés en 1/10 000 000 de seconde.

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

Ici en utilisant 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 ""
    }'

Produit 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 d'inactivité du système affiche un peu moins de 800% sur un système inactif, c'est parce que votre système a 8 cœurs de processeur (enfin au moins 8 threads) car cela compte le temps de processeur de tous les processeurs.

Notez également que ce qui EVERY:1précède est un mensonge. wmicne semble pas donner cette sortie chaque seconde. 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 1 seconde et un peu ce qui signifie que ces pourcentages ne sont pas très précis et légèrement surestimés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.