Obtenir des pids à partir du mot clé ps -ef | grep


111

Je veux utiliser ps -ef | grep "keyword"pour déterminer le pid d'un processus démon (il y a une chaîne unique en sortie de ps -ef).

Je peux tuer le processus avec pkill keywordy a-t-il une commande qui renvoie le pid au lieu de le tuer? (pidof ou pgrep ne fonctionne pas)

Réponses:


231

Vous pouvez utiliser pgreptant que vous incluez les -foptions. Cela fait pgrepcorrespondre les mots-clés dans l'ensemble de la commande (y compris les arguments) au lieu du seul nom du processus.

pgrep -f keyword

Depuis la page de manuel :

-f       Le modèle n'est normalement mis en correspondance qu'avec le nom du processus. Lorsque -fest défini, la ligne de commande complète est utilisée.


Si vous voulez vraiment éviter pgrep, essayez:

ps -ef | awk '/[k]eyword/{print $2}'

Notez le []autour de la première lettre du mot-clé. C'est une astuce utile pour éviter de faire correspondre la awkcommande elle-même.


3
ps est surutilisé, et pgrep tellement sous-utilisé. Merci pour le post.
— Felipe Alvarez

6
Une façon de passer la sortie à tuer est: kill -9 `pgrep -f keyword`
— Kris

Cette réponse est la meilleure qui soit. Tellement de temps que j'ai perdu avecps aux | grep chrome
— Brandon

J'ai dû utiliser l' [k]astuce pgrep -f. Mon script s'exécutait dans un sous-shell, donc je pense qu'il prenait sa commande parent (difficile à savoir avec certitude - le pid qu'il a renvoyé avait disparu lorsque la commande a été exécutée!)
— ArtOfWarfare

2
@Kris pour ce cas d'utilisation ne serait pas plus simple à utiliser pkill -9 -f keyword?
— oidualc

53

Essayer

ps -ef | grep "KEYWORD" | awk '{print $2}'

Cette commande devrait vous donner le PID des processus contenant KEYWORD. Dans ce cas, awkrenvoie ce qui se trouve dans la deuxième colonne à partir de la sortie.


2
Parce que cela peut renvoyer plus d'un pid, vous pouvez obtenir le premier en ajoutant | head -1.
— Kris

'head -1' retournera grep PID dans certains Linux, devrait être tail -1.
— Joao Vitorino du

22

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'


4
Peut-être une faute de frappe? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
— rmv

Savez-vous comment passer le PID retourné dans "kill -9"?!
— alybadawy

3
@alybadawy juste ajouter | xargs kill -9à la fin
— patte

8

j'utilise

ps -C "keyword" -o pid=

Cette commande devrait vous donner un numéro PID.



3

Pour tuer un processus par un mot-clé spécifique, vous pouvez créer un alias dans ~/.bashrc(linux) ou ~/.bash_profile(mac).

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"

Parfait! L'ajout d'un tuyau à la fin d' | head -1enveloppe tout cela bien et net.
— Russ
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.