top -pid 3907 -stats "pid,command,cpu"
-pid 3907
: votre identifiant de processus
-stats pid,command,cpu
: affiche uniquement l'ID du processus, le nom et le CPU%
Pas besoin de s'exécuter awk
sur la sortie.
Si vous souhaitez post-traiter la sortie, utilisez -l 0
pour exécuter en mode de journalisation (0 signifie indéfiniment, tout le reste limite le nombre d'échantillons). La sortie ressemblera à ceci (deux répétitions):
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:13
Load Avg: 0.14, 0.14, 0.09
CPU usage: 20.0% user, 26.66% sys, 53.33% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16345 total, 1048M resident, 54M private, 338M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 750M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 0.0
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:14
Load Avg: 0.13, 0.14, 0.09
CPU usage: 0.95% user, 1.90% sys, 97.14% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16346 total, 906M resident, 54M private, 386M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 751M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 2.7
Utilisez awk
ou un outil similaire pour afficher uniquement toutes les 13 lignes (car ces lignes contiennent les valeurs dans cet exemple):
$ top -l 0 -pid 3907 -stats pid,command,cpu | awk 'NR%13==0'
3907 WindowServer 0.0
3907 WindowServer 1.3
3907 WindowServer 2.2
# top -p1 -stats "pid,command,cpu" top: unknown option 't'
top
que Linux.Cela peut certainement être fait et je vais expliquer comment je procéderais. Je ne prétends pas que c'est une approche optimale, mais elle fait l'affaire. J'utilise Linux (et bash shell), donc le comportement par défaut de mon top peut être légèrement différent. Ainsi, vous devrez peut-être régler ce mini-howto pour votre scénario particulier.
Courez juste en haut , sans aucun argument:
$ top
Voici l'en-tête et une ligne pertinente de ma sortie:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 java
J'ai choisi un processus qui reste en mémoire pendant un certain temps et consomme réellement du CPU, je vais l'utiliser comme processus de test pour atteindre l'objectif final.
Par défaut, top s'exécute en mode interactif. Cela ne me convient pas, je souhaite capturer les données pertinentes et les imprimer. Je gérerai ensuite la tâche d'afficher les données de manière interactive. Citations pertinentes de la page de manuel supérieure:
Il s'agit de la commande supérieure ajustée qui imprime la sortie une seule fois, puis se termine:
$ top -b -n 1
Je connais le PID que je veux regarder, donc je vais ajouter une restriction en haut, donc il imprime des données uniquement sur ce processus:
$ top -b -n 1 -p 2569
Même en mode batch, top imprime toujours un en-tête, contenant des statistiques diverses à l'échelle du système comme la disponibilité, la mémoire libre / l'échange, etc. Je n'en ai pas besoin. Tout ce dont j'ai besoin, c'est d'une seule ligne - celle qui contient des données sur mon processus, donc je vais la couper de la sortie entière comme ceci:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1
Comme vous pouvez le voir, j'ai la deuxième ligne de 1.
Je vais rediriger cette ligne vers awk pour extraire uniquement les colonnes dont j'ai besoin:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Jusqu'à présent, je faisais ces manipulations en ligne de commande, maintenant c'est le moment d'ajouter de la persistance et de la flexibilité à notre cas particulier codé en dur. Je déplace toute la ligne dans un script shell simple. Je l'appellerai 3top , le nom est souligné car il sera utilisé plus tard:
#!/bin/bash
top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Le numéro PID est codé en dur, voici comment faire pour que le script l'accepte comme argument de ligne de commande:
#!/bin/bash
top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Pour faire des statistiques d'affichage 3top sur le PID 2569, il doit être appelé comme ceci:
$ ./3top 2569
Je veux également que le pourcentage soit affiché après la charge du processeur, donc je règle mon script 3top comme ceci:
#!/bin/bash
out=$(top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}')
echo "$out%"
J'ai redirigé la sortie entière d'une chaîne de commandes (connectées via des tuyaux) dans une variable. Ensuite, je l'imprime en utilisant l'écho et j'ajoute un «%» à la fin, car la charge du processeur est le dernier champ
À ce stade, j'ai un script batch qui accepte un PID comme argument et imprime les statistiques une fois. Vous voulez plutôt une surveillance en temps réel? C'est facile, car la montre peut le faire! Exécutez le script comme ceci:
$ watch -n 1 3top 2569
Il effectuera une surveillance en temps réel en exécutant 3top une fois par seconde.
la source
top
. option ou syntaxe invalide: -b . Aucune idée pourquoi cela a été voté à plusieurs reprises.top
(inprocps
) ne peut pas être installé à l'aide de Homebrew, MacPorts ou Fink et ne peut pas être compilé à partir de la source à l'aide demake
oucc top.c
.Le
top
format d'affichage est personnalisable, mais il n'existe aucun moyen de spécifier les options d'affichage sur la ligne de commande. Si vous êtes inventif, cependant, vous pouvez probablement faire ce dont vous avez besoin en manipulant intelligemment le~/.toprc
fichier.En supposant que vous n'avez pas encore personnalisé l'affichage de
top
(et que vous n'avez pas de~/.toprc
fichier):top
.*
côté que vous ne voulez pas, appuyez sur la lettre correspondante pour désélectionner ce champ. Par exemple, appuyez sur epour désélectionner leUser Name
champ. Lorsque vous avez terminé, vous ne devriez avoir un*
côtéProcess Id
,CPU usage
etCommand name/line
.~/.toprc
fichier.top
, puis relancez pour vérifier que vos paramètres sont enregistrés.~/.toprc
quelque chose comme~/min.toprc
avant de lancertop
. Lorsque vous souhaitez basculer vers la disposition minimale, renommez~/min.toprc
-la~/.toprc
avant de lancertop
.Ce changement de nom et ce lancement de fichier
top
peuvent probablement être transformés en un simple script shell par quelqu'un avec une once d'expérience et de connaissances en plus que moi. Vous aurez besoin d'une attention particulière si votretop
mise en page régulière a déjà été personnalisée.la source
.toprc
? J'aime ajouter le filtreRUID>999
au démarrage.