2011-11-14 5 views
82

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

Posso interrompere il processo con pkill keyword c'è qualche comando che restituisce il pid invece di eliminarlo? (Pidof o pgrep doesnt lavoro)

risposta

175

È possibile utilizzare pgrep finché si includono le opzioni -f. Ciò rende pgrep le parole chiave di corrispondenza nell'intero comando (inclusi gli argomenti) anziché solo il nome del processo.

pgrep -f keyword 

Dal man page:

-f       modello è normalmente pari solo contro il nome del processo. Quando è impostato -f, viene utilizzata la riga di comando completa.


Se si vuole davvero evitare pgrep, provare:

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

Annotare il [] intorno alla prima lettera della parola chiave. Questo è un trucco utile per evitare la corrispondenza del comando awk stesso.

+1

grazie :) un po 'nuovo a Linux questo -f funziona: P –

+1

Prego, Dennis. –

+3

ps è sovrautilizzato e pgrep così poco utilizzato. Grazie per il post. –

38

Prova

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

che il comando dovrebbe darvi il PID dei processi con una parola chiave in loro. In questo caso, awk restituisce ciò che si trova nella seconda colonna dall'output.

+1

Poiché questo può restituire più di un pid, è possibile ottenere il primo aggiungendo '| testa -1'. – Kris

5

Questo è disponibile su Linux: pidof parola chiave

8

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

+4

Forse un errore di battitura? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}' – rmv

+0

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

+0

@alybadawy basta aggiungere '| xargs kill -9' fino alla fine – patte8

6

Io uso

ps -C "keyword" -o pid= 

Questo comando dovrebbe darvi un numero PID.