Linux: kill dei processi con uno script di shell gennaio 6, 2008
Inviato da synthesis in : Informatica, Linux , trackback
Buon giorno! Usando linux da ormai parecchio tempo, mi sono spesso trovato in difficoltà ad “uccidere” un processo, per un programma bloccato o per qualsiasi altro motivo. La cosa è veramente banale, ma vediamo quali sono i problemi che ho riscontrato. Esistono dei tool abbastanza interessanti, uno di questo è pkill: dal manuale si legge:
“pgrep, pkill - look up or signal processes based on name and other attributes”
Perfetto. Proviamolo cercando di terminare amsn:
# pkill amsn
Amsn non si chiude?!? Che succede? con
# ps aux | grep amsn
vedo che in realtà il programma è:
1000 5837 0.1 1.7 45028 37284 ? S 09:37 0:42 wish /usr/bin/amsn
Allora devo procedere manualmente con un
# kill -9 5837
Fare un ps aux e un successivo kill non è molto faticoso, ma ho deciso ugualmente di impiegare un paio di minuti per buttare giù uno scriptino si shell che faccia al caso mio e risparmiare qualche comando inutile.
#!/bin/sh
if [ $# = 1 ]
then
ps aux | grep $1 | head -1ID=`ps aux | grep $1 | awk ‘ { print $2 } ‘ | head -1`
echo “killare il processo? s/n” && read risp
if [ $risp = s ]
then
kill -9 $ID
echo Processo $ID $1 killato con successo.
fi
fi
Come dicevo prima l’ho scritto in pochissimo tempo, l’output non è dei migliori, non vengono fatti controlli sui parametri in ingresso etc… però fa il suo sporco lavoro!!! Vediamo ora di capire come funziona ed un possibile utilizzo.
Tralasciando la prima riga che richiama solo l’interprete, qui stiamo controllando che il parametro in ingresso sia unico, se non lo è il programma termina direttamente.
if [ $# = 1 ]
Ora stampiamo a video il primo processo che corrisponde al parametro
ps aux | grep $1 | head -1
Ne memorizziamo l’id (secondo campo dell’output di ps)
ID=`ps aux | grep $1 | awk ' { print $2 } ' | head -1`
e chiediamo conferma all’utente:
echo "killare il processo? s/n" && read risp
se la risposta è “s” procediamo con il kill -9:
if [ $risp = s ]
then
kill -9 $ID
echo Processo $ID $1 killato con successo.
fi
Possiamo salvare il codice riportato più in alto in un file, dargli i permessi di esecuzione e spostarlo infine in un path del nostro utente (vedere echo $PATH) come /usr/bin o /bin.
Proviamolo subito con un ipotetico processo bloccato (gmplayer):
synthesis@localhost ~ $ ikill mplayer
1000 32598 0.5 1.2 51168 25548 pts/1 S+ 20:40 0:00 gmplayer video.avi
killare il processo? s/n
s
Processo 32598 mplayer killato con successo.
synthesis@localhost ~ $
Fatemi delle proposte per migliorare questo script, come controlli sui parametri, sull’output etc. Li pubblicherò sicuramente!








Commenti»
Anche io sto usando l’ambiente KDE! Sono quasi sicuro che tu abbia anche su mandriva il programma Ksysguard (monitor di sistema di KDE). Nella mia distribuzione si trova sotto Menu K -> Sistema -> Monitor di Sistema. Puoi anche attivarlo in modo automatico (se l’hai installato) con i tasti CTRL+ESC. Oltre a mostrarti il carico di sistema Ksysguard ti dà anche la lista completa dei processi con funzione di ricerca (utilissima) e possibilità di kill con un unico bottone. Fammi sapere!
grazie per la risposta
cmq utilizzo kde su mandriva 2008 (e il favoloso compiz)
non sono solito domandare senza prima ricercare, cmq mi è parso che l’argomento sia poco trattato
se potete indicarmi un pacchetto adatto (preferibilmente urpmi o rpm per i motivi di cui sopra) ve ne sono grato d’avance
Ciao sad81! Se preferisci i tool grafici, in linea di massima esitono programmi che fanno al caso tuo per ogni ambiente desktop. Tu cosa stai usando ora? Kde, Gnome o altro? Così possiamo indirizzarti verso il programma giusto
cmq con il vostro kill sono almeno riuscito (sempre tramite shell purtroppo) a killare amsn bloccato (dunque grazie)
msg mandato con la mandriva 2008 ma in dual boot se non per virtualbox nessuna pssibilità di migrazione neanche con wine…. siete d’accordo ?
in windows io utilizzo process explorer per killare processi bloccati.
ho cercato per linux non esiste qualcosa del genere senza passare per la shell?
sapete io credo che il problema della migrazione da win a linux sia, oltre alla mancanza di programmi che girano solo su win, anche il fatto che si è spesso obligati a passare per dei comandi da consolle per poter fatre parecchie cose…..