Existe-t-il des options relativement simples avec top pour suivre un processus spécifique?
Idéalement en identifiant le processus par une valeur lisible par l'homme? par exemple. chrome
ou Java
.
En d'autres termes, je veux afficher toutes les informations typiques fournies par top, mais pour que les résultats soient filtrés en fonction des paramètres fournis, à savoir "chrome" ou "Java"
Vous pouvez simplement utiliser grep
:
NAME
grep, egrep, fgrep, rgrep - print lines matching a pattern
SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
DESCRIPTION
grep searches the named input FILEs (or standard input if no files are named, or if a single
hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By
default, grep prints the matching lines.
Exécutez la commande suivante pour obtenir la sortie souhaitée (ex-chrome):
top | grep chrome
Ici, nous utilisons grep
avec des pipelines |
so top
& grep
run parallel; top
sortie donnée à grep
(en entrée) et grep chrome
filtre les lignes correspondantes chrome
jusqu'à ce que top
s'arrête.
D'après mon autre réponse ici , vous pourriez faire quelque chose comme,
top -p `pgrep "Java"`
top -p `pgrep -d "," Java`
Explication:
top -p pid1,pid2
: affiche plusieurs informations sur le processus, le pid doit être séparé par ,
pgrep -d "," Java
: affiche les pids de tous les Java, les pids sont séparés par une nouvelle ligne par défaut. utilisez le -d ","
pour le séparer par ,
comme requis par le haut.Si vous voyez une erreur comme top: -p argument missing
, cela signifie non Java est en cours d'exécution, c'est-à-dire que pgrep n'a pas de sortie.
Dans OpenBSD top
, appuyez simplement sur g et entrez le nom de la commande sur laquelle vous souhaitez filtrer.
Dans top
sur par exemple Ubuntu, appuyez sur o et entrez par exemple COMMAND=chrome
pour afficher uniquement les entrées de la colonne COMMAND
qui sont égales à chrome
.
Sous Linux qui utilise la même implémentation top
qu'Ubuntu, lisez la section FILTERING in a Window du manuel top
.
D'autres bonnes réponses ont été fournies, mais j'ai fait un script il y a quelque temps, que j'ai nommé ptop, qui me sert bien:
#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
echo No processes with the specified name\(s\) were found
fi
Cela prend en charge plusieurs noms de processus à spécifier (comme ptop bash chrome
) et fournit un message d'erreur plus agréable dans le cas où il n'y a/aucun processus avec l'un des noms spécifiés en cours d'exécution.
Si vous souhaitez rester dans top
et conserver tous les autres processus en vue du contexte, vous pouvez appuyer sur L
pour rechercher votre processus:
Locate string chrome
Cela mettra en surbrillance tout processus avec chrome
dans le nom et le mettra en vue. Utilisation &
pour passer au match suivant.
Vous pouvez appuyer sur c
pour basculer entre l'affichage du nom du processus et la commande complète.
Vous pouvez également utiliser un filtre en haut pour isoler des processus spécifiques. Appuyez sur "O" pour afficher l'invite du filtre. Tapez ensuite un filtre au format FIELD = value. Par exemple, pour filtrer tous les processus tmux, utilisez:
COMMAND=tmux
Utilisez '=' pour réinitialiser les filtres. Voir la section intitulée "FILTRAGE" dans la page de manuel supérieure.
Une fois que vous connaissez le PID du processus que vous souhaitez suivre (en exécutant ps auxw |grep your_process
) run top en mode batch:
top -b -n 1 -p 1234 | tail -n 1
Où 1234 est votre PID de processus
Cette approche est meilleure pour le suivi. C'est plus sûr que d'utiliser grep
sur un nom, plus simple et utilise moins de ressources.