web-dev-qa-db-fra.com

Comment afficher un processus spécifique en haut

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"

54
Michael Coleman

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.

31
Pandya

D'après mon autre réponse ici , vous pourriez faire quelque chose comme,

top -p `pgrep "Java"`
40
Ramesh
top -p `pgrep -d "," Java`

Explication:

  1. top -p pid1,pid2: affiche plusieurs informations sur le processus, le pid doit être séparé par ,
  2. 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.

23
Mingjiang Shi

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.

16
Kusalananda

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.

7
Marcelo

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.

4
jonatan

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.

1
Gearoid Murphy

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.

0
Ben Shomer