Comment afficher un processus spécifique en haut

48

Existe-t-il des options relativement strictes avec top pour suivre un processus spécifique?
Idéalement en identifiant le processus par une valeur lisible par l'homme? par exemple chromeou java.

En d'autres termes, je veux voir toutes les informations typiques fournies par le haut, mais pour que les résultats soient filtrés aux paramètres fournis, c'est-à-dire. 'chrome' ou 'java'

Michael Coleman
la source
1
avez-vous essayé top | grep chrome?
Pandya
1
vous pouvez également utiliser ps -x | chromepour obtenir pid (laissez pid affiché 2034) puistop | grep 2034
Pandya
top | grep chromea fonctionné parfaitement - merci!
Michael Coleman
@Pandya - de plus, le processus que je recherchais ne fonctionnait que pendant quelques secondes (node.js lors d'un test d'intégration) - ce qui signifiait que lorsque j'obtenais ps -x | process_namele PID, lorsque j'ai exécuté le processus à nouveau, le PID était différent et par conséquent Le PID d'origine ne l'identifierait pas.
Michael Coleman

Réponses:

25

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 le résultat souhaité (ex-chrome):

top | grep chrome

Ici, nous utilisons grepdes pipelines |pour que top& greprun parallèle; topsortie donnée à grep(en entrée) et grep chromefiltre les lignes correspondantes chromejusqu’à l’ toparrêt.

Pandya
la source
1
merci, je sais que d’autres personnes ont leurs préférences, mais j’aime cette réponse car elle est facile à comprendre et donc plus facile à retenir à l’avenir aussi! - J'aurais voté mais je n'ai pas assez de réputation ...
Michael Coleman
3
Cela ne fonctionne que si le processus est dans la sortie affichée en haut. Je pense que la réponse de @Ramesh devrait être celle acceptée
jb
@JamieBullock la question ne traite topque et OP veulent filtrer le processus en fonction top.
Pandya
@Pandya en fait, je retire mon commentaire précédent car il était basé sur une erreur dans mon code. Néanmoins, je pense que la réponse de @ Ramesh est meilleure (et filtre également le processus en fonction du sommet). Je peux facilement briser le vôtre, par exemple avecsleep 10 & top | grep sleep
jb
J'aime mieux unix.stackexchange.com/a/165343/48973 car il montre les en-têtes.
Ryan
39

De mon autre réponse ici , vous pourriez faire quelque chose comme,

top -p `pgrep "java"`
Ramesh
la source
4
top -p `pgrep "java"`me donne l'erreur suivante dans un shell bash top: -p requires argument. top -ppgrep -d ',' "apache2" a fonctionné pour moi, mais je ne comprenais pas vraiment ce que la commande faisait. Est-ce une façon de nourrir plusieurs arguments en haut?
Michael Coleman
@Ramesh vous devez donner à la pidliste séparée par une virgule pour fonctionner.
Kannan Mohan
3
C'est la bonne réponse.
j03m
1
+1 C'est la bonne réponse. "top | grep Chrome" est plutôt barbare, car il supprime TOUT LE SORTIE du haut ne correspondant pas à "Chrome", perdant des éléments tels que les en-têtes et les étiquettes de colonne. Utiliser un sous-shell avec la sortie de pgrep constitue une application correcte de la philosophie unix.
John M Naglick
2
@loretoparisi c'est peut-être parce que le sélecteur que vous utilisez correspond à plusieurs processus. Voir cette réponse pour une commande qui fonctionne avec un ou plusieurs processus correspondants.
Michael Hays
21
top -p `pgrep -d "," java`

Explication:

  1. top -p pid1,pid2: afficher plusieurs informations de processus, le pid doit être séparé par ,
  2. pgrep -d "," java: imprimer les pids de tous les programmes java, les pids sont séparés par une nouvelle ligne par défaut. utilisez le -d ","pour le séparer ,comme requis par le haut.

Si vous voyez une erreur similaire top: -p argument missing, cela signifie qu'aucun programme Java n'est en cours d'exécution, c'est-à-dire que le pgrep n'a pas de sortie.

Mingjiang Shi
la source
1
Cette solution fonctionne mieux que d'utiliser top -p pgrep "java" `` seulement. Merci.
loretoparisi
1
Prévenez l'erreur en vérifiant pgreple code de sortie:pids="$(pgrep -d, java)" && top -p "$pids"
syme
12

Sous OpenBSD top, appuyez simplement sur get entrez le nom de la commande sur laquelle vous souhaitez filtrer.

Par topexemple dans Ubuntu, appuyez sur oet entrez, par exemple, COMMAND=chromepour afficher uniquement les entrées de la COMMANDcolonne qui sont égales à chrome.

Sous Linux utilisant la même topimplémentation que Ubuntu, lisez la section FILTERING in a Window du topmanuel.

Kusalananda
la source
7

D'autres bonnes réponses ont été fournies, mais j'ai créé 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

Ceci prend en charge plusieurs noms de processus à spécifier (comme ptop bash chrome) et fournit un message d'erreur plus agréable au cas où il n'y aurait pas de processus avec l'un des noms spécifiés en cours d'exécution.

Marcelo
la source
3

Si vous souhaitez rester topet conserver tous les autres processus en vue du contexte, vous pouvez appuyer sur Lpour rechercher votre processus:

Locate string chrome

Cela mettra en évidence tout processus avec chromeson nom et le mettra en évidence . Utilisez &pour aller au prochain match.

Vous pouvez appuyer sur cpour afficher le nom du processus et la commande complète.

Jonatan
la source
Ceci ^ parce que les gens de RTFM! man top | less +/5d
cprn
0

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. Reportez-vous à la section intitulée "FILTRAGE" dans la page de manuel supérieure.

Gearoid Murphy
la source