Ottenere pid dalla parola chiave ps -ef | grep


111

Voglio usare ps -ef | grep "keyword"per determinare il pid di un processo daemon (c'è una stringa univoca nell'output di ps -ef in esso).

Posso terminare il processo con pkill keywordc'è qualche comando che restituisce il pid invece di ucciderlo? (pidof o pgrep non funzionano)

Risposte:


231

È possibile utilizzare pgrepil tempo che si includono le -fopzioni. Ciò fa sì che le pgrepparole chiave corrispondano nell'intero comando (inclusi gli argomenti) invece del solo nome del processo.

pgrep -f keyword

Dalla pagina man :

-f       Il modello normalmente viene confrontato solo con il nome del processo. Quando -fè impostato, viene utilizzata l'intera riga di comando.


Se vuoi davvero evitare pgrep, prova:

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

Notare []intorno alla prima lettera della parola chiave. Questo è un trucco utile per evitare di abbinare il awkcomando stesso.


3
ps è abusato e pgrep è così poco utilizzato. Grazie per il post.
Felipe Alvarez

6
Un modo per passare l'output a kill è: kill -9 `pgrep -f keyword`
Kris

Questa risposta è la migliore in assoluto. Così tanto tempo ho sprecato conps aux | grep chrome
Brandon

Ho dovuto usare il [k]trucco pgrep -f. Il mio script era in esecuzione in una subshell, quindi penso che stesse raccogliendo il suo comando genitore (difficile da sapere con certezza - il pid restituito era sparito quando il comando è stato eseguito!)
ArtOfWarfare

2
@Kris per questo caso d'uso non sarebbe più semplice da usare pkill -9 -f keyword?
oidualc

53

Provare

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

Quel comando dovrebbe darti il ​​PID dei processi con KEYWORD in essi. In questo caso, awkrestituisce ciò che è nella seconda colonna dall'output.


2
Poiché questo può restituire più di un pid, puoi ottenere il primo aggiungendo | head -1.
Kris

'head -1' restituirà grep PID in alcuni Linux, dovrebbe essere tail -1.
Joao Vitorino

22

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


4
Forse un errore di battitura? ps -ef | grep PAROLA CHIAVE | grep -v grep | awk "{print $ 2}"
rmv

Sai come passare il PID restituito in "kill -9" ?!
alybadawy

3
@alybadawy aggiungi solo | xargs kill -9alla fine
patte

8

Io uso

ps -C "keyword" -o pid=

Questo comando dovrebbe darti un numero PID.


7

Questo è disponibile su linux: parola chiave pidof


3

Per terminare un processo con una parola chiave specifica è possibile creare un alias in ~/.bashrc(linux) o ~/.bash_profile(mac).

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

Perfetto! L'aggiunta di una pipa alla fine di | head -1avvolge tutto in modo bello e pulito.
Russ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.