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?

Husman
la source
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.

philwalk
la source
Soit ps -Wou ps --windowstravailler, voirps --help
Timo
2

Vous devez installer la bibliothèque procps pour cygwin, cela inclut le programme supérieur, mais qui ne listera que les processus en cours d'exécution dans cygwin. Si vous souhaitez voir tous les processus s'exécuter sur Windows, reportez-vous à cette réponse: /programming/3503681/cygwin-top-command-see-processes-for-all-users

Jordan LaPrise
la source
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.

sch
la source