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.