2012-01-24 14 views

risposta

846

Usa pkill -f, che corrisponde al modello per qualsiasi parte della riga di comando

pkill -f my_pattern 
+3

+1. pkill è molto utile – Jayan

+4

@ Jayan: è anche piuttosto indiscriminato nella sua uccisione. È sorprendentemente facile da maneggiare in modo errato ... – thkala

+5

@thkala: l'opzione -x dovrebbe essere d'aiuto se si vuole solo corrispondere all'input effettivo .. – Jayan

46

Se avete bisogno di una maggiore flessibilità nella scelta dei processi utilizzano

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
    kill -9 $KILLPID; 
done 

È possibile utilizzare grep -e ecc

+2

-1 Non hai bisogno di un ciclo, puoi semplicemente' kill -9 \ 'ps ax | awk '[m] y_pattern {print $ 1}' \ '' (nota anche il refactoring, vedi anche il mio commento sulla risposta di @ synthesizerpatel). – tripleee

+8

@ triple Nessun problema con il downvote, ma tu ** ti rendi conto che l'OQ era * "Voglio uccidere tutti i processi che ottengo da: ps aux | grep my_pattern" *, che ho accettato di dovere. –

+0

Uccidere ucciderà tutti i processi in una volta sola, non è necessario un ciclo per quello. Se 'ps' restituisce tre processi 123, 234 e 345, puoi' uccidere 123 234 345' proprio come puoi 'rm' o' cat' argomenti di file multipli. – tripleee

79

Uccidete tutti i processi che corrisponde alla stringa "myProcessName":

uno di linea:

ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs kill -9 

Fonte: http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

+14

Questo genererà un errore se non viene trovato alcun processo corrispondente al nome. Potresti voler usare 'ps -ef | grep myProcessName | grep -v grep | awk '{print $ 2}' | xargs -r kill -9' per fare in modo che xargs non esegua il comando se non viene fornito alcun argomento. – Epigene

+0

Solo una leggera modifica, forse è meglio citare il nome del processo: 'ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $ 2}' | xargs -r kill -9' Senza virgolette, solo uno dei miei processi in background è stato ucciso alla prima esecuzione. L'esecuzione di nuovo ha ucciso il resto. –

12

è possibile utilizzare il seguente comando per elencare il processo

ps aux | grep -c myProcessName 

se avete bisogno di controllare il conteggio di t processo di cappello quindi eseguire

ps aux | grep -c myProcessName |grep -v grep 

dopo di che si può uccidere il processo utilizzando

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 
+0

è possibile utilizzare il seguente comando per elencare il processo ps aux | grep -c myProcessName se è necessario controllare il conteggio di quel processo quindi eseguire ps aux | grep -c myProcessName | grep -v grep dopo di che si può uccidere il processo utilizzando kill -9 $ (ps aux | grep -e myProcessName | awk '{print $ 2}') –

1

suona male?

pkill `pidof myprocess` 

esempio:

# kill all java processes 
pkill `pidof java` 
5

Se giudicare pkill -f PATTERN un po 'troppo pericoloso, ho scritto ezkill uno script bash che richiederà di scegliere quali processi tra quelli che corrispondono al modello si vuole uccidere.

-1

È possibile utilizzare il seguente comando per:

ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9 

o

ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9 

Funziona per me.

+1

Benvenuti a StackOverflow. Utilizzare il rientro a 4 spazi o tabulazioni per le linee di codice in modo che siano formattati come blocchi di codice. I migliori saluti – YakovL

1

È possibile utilizzare il seguente comando per

kill -9 $(ps aux | grep 'process' | grep -v 'grep' | awk '{print $2}') 
4

Inoltre è possibile utilizzare killall -r my_pattern. -r Interpreta il nome del processo come un'espressione regolare estesa.

killall -r my_pattern 
0

Se non si vuole prendere il mal di testa di trovare l'ID del processo, utilizzare regexp per uccidere processo per nome. Ad esempio, per uccidere il codice seguente chrome farà il trucco.

killall -r --regexp chrome

Problemi correlati