web-dev-qa-db-fra.com

Linux/Bash, en utilisant ps -o pour obtenir un processus par nom spécifique?

J'essaie d'utiliser la commande ps -o pour obtenir uniquement des informations spécifiques sur les processus correspondant à un certain nom. Cependant, j'ai quelques problèmes à ce sujet. Lorsque j'essaie de l'utiliser même pour obtenir tous les processus, il renvoie simplement un sous-ensemble de ce qu'un ps -ef normal renverrait (il ne renvoie pas le même nombre de résultats de sorte qu'il ne renvoie pas tous les processus en cours)

ps -ef -o pid,time,comm

Je veux essayer quelque chose comme ceci (ci-dessous) mais intégrer le ps -o pour obtenir des informations spécifiques (uniquement le PID)

ps -ef |grep `whoami`| grep firefox-bin

Tout conseil est apprécié sur la façon de le faire correctement, merci 

57
Rick

Cela vous donnera le PID d'un processus par son nom:

pidof name

Que vous pouvez ensuite reconnecter à ps pour plus de détails:

ps -p $(pidof name)
92
Alex Howansky

C'est un peu vieux, mais je suppose que ce que vous voulez, c'est: ps -o pid -C PROCESS_NAME, par exemple:

ps -o pid -C bash

EDIT: En fonction du type de sortie que vous attendez, pgrep serait plus élégant. À ma connaissance, cela est spécifique à Linux et donne un résultat similaire à celui décrit ci-dessus. Par exemple:

pgrep bash
24
h7r
ps -fC PROCESSNAME

ps et grep est une combinaison dangereuse - grep essaie de faire correspondre tout ce qui se trouve sur chaque ligne (donc le trop commun: grep -v grep hack). ps -C n'utilise pas grep, il utilise la table de processus pour une correspondance exacte. Ainsi, vous obtiendrez une liste précise avec: ps -fC sh plutôt que de trouver chaque processus avec sh quelque part sur la ligne.

10
Gerald Hughes

Parfois, vous devez attribuer un nom au processus, dans ce cas:

ps aux | grep simple-scan

Exemple de sortie:

simple-scan  1090  0.0  0.1   4248  1432 ?        S    Jun11   0:00
4
user3751385

Désolé, beaucoup de retard pour la fête, mais je vais ajouter ici que si vous voulez capturer des processus avec des noms identiques à votre chaîne de recherche, vous pouvez le faire.

pgrep -x PROCESS_NAME

-x          Require an exact match of the process name, or argument list if -f is given.
             The default is to match any substring.

Ceci est extrêmement utile si votre processus original a créé des processus enfants (éventuellement zombie lorsque vous interrogez) qui préfixent le nom du processus original en leur propre nom et que vous essayez de les exclure de vos résultats. C'est ce que font beaucoup de démons UNIX. Mon exemple préféré est ninja-dev-sync .

0
Spade