Script della shell per uccidere -9 in base al nome


28

C'è un modo (forse uno script) come automatizzare questo processo:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Sfortunatamente, pkillè troppo debole perché devo andare con l' -9opzione attiva kill.


2
Puoi usarlo anche -9con pkill...
Smetti di fare del male a Monica l'

6
Secondo me, è più elegante e corretto da usare -KILLdi -9. Quale numero corrisponde a quale segnale dipende dall'implementazione. SIGKILLsembra essere 9su Linux i386 e Linux amd64, ma non necessariamente ovunque. ( Maggiori informazioni qui. )
Eliah Kagan,

5
@EliahKagan: anche se mi piace usare -KILLanche (perché rende il codice più leggibile), va notato che SIGKILL = 9è specificato da POSIX , quindi -9è abbastanza portatile al giorno d'oggi (e non dipende da kernel o architetture).
Andrea Corbellini,

Risposte:


36

Puoi usare la tua shell per fare questo compito per te:

kill -9 $(pidof middleman)

La shell esegue pidof middlemanprima il comando . L'output di pidof (8) è l'id del processo. Quindi la shell sostituisce il pidofcomando con l'id di processo ed esegue kill -9 18845(o qualunque sia l'id di processo corretto).


Qual è la differenza tra questo e kill -9 $(pgrep middleman)?
Aaron Franke,

54

Esiste una soluzione ancora più semplice di quella di qbi: killalluccidiamo i processi per nome e puoi specificare i segnali.

killall -9 middleman

Vedi man killallper maggiori informazioni e opzioni extra (ce ne sono alcune).

Come suggerisce il nome, questo invia il segnale a tutti i processi denominati middleman. Ma questo non è diverso da altri modi (come pkill). Inoltre, pkill -9 middlemanindirizzerà i processi il cui nome corrisponde ma non è uguale middleman, come ad middleman2esempio.


2
killallper la vittoria!
Andrea Corbellini,

4
uccidere tutti gli intermediari? oh caro ...
Tobias Kienzler il

16

Le altre risposte sono del tutto corrette, ma potrei anche aggiungere una terza opzione, quindi tutte sono documentate qui. Puoi anche usare:

pkill -9 middleman

Vedi man pkillper maggiori informazioni e opzioni extra.

Non importa quale di questi metodi usi. Funzioneranno tutti. Ma conoscendo le opzioni se utile se si desidera modificare il comportamento in qualche modo, poiché le pagine man corrispondenti mostrano quali altre opzioni di corrispondenza sono disponibili.


Strano, non funziona qui. Nemmenomiddleman*
mreq,

1
Ah. Guardando più da vicino, sembra probabile che tu voglia uccidere un interprete rubino, piuttosto che un processo veramente chiamato middleman. Questo è dove le differenze nel modo esattamente pkill, killall, pidofe grepprocessi partita davvero iniziare a importa!
Robie Basak,

12
pkill -9 -f middleman

L' -fopzione fa corrispondere alla riga di comando completa, anziché solo al nome del processo.

Nota che -9dovrebbe essere un segnale di ultima istanza, non qualcosa da usare di routine.


1
Grazie! Mi piace molto la possibilità di abbinare ilcomplete command line
cwd il

la riga di comando completa è davvero fantastica!
Okwap il

10

Solo per divertimento, vorrei aggiungere un modo più manuale, vecchio stile

kill -9 `ps aux | grep middleman | awk '{print $2}'`

1
L'ho fatto al lavoro qualche anno fa e l'amministratore mi ha dato un'occhiata che diceva "ok, nonno". Può anche aggiungere un grep -v grep prima di awk per assicurarsi che non uccida anche il comando grep.
Iain Holder

@gerhard, grazie per la modifica, non sono riuscito a trovare le zecche posteriori sul mio iPad. grep -v è una buona idea ...
slipset

Il vero modo della vecchia scuola sarebbe scrivere ... grep [m]iddleman ...per evitare di uccidere il grepprocesso per caso. In questo modo il grep non può eguagliare se stesso a causa di citazioni divertenti.
Mikko Rantalainen,

1
killall -9 -ir regex_pattern

che è interattivo (sicuro) e corrisponde al nome del comando parziale.

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.