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)

Dennis Ich
la source

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.

Shawn Chin
la source
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.

Lewis Norton
la source
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}'

Vinayak
la source
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.

Arksonic
la source
7

Ceci est disponible sur linux: mot-clé pidof

dbrank0
la source
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}'`"
swayamraina
la source
Parfait! L'ajout d'un tuyau à la fin d' | head -1enveloppe tout cela bien et net.
Russ