salta alla navigazione

Linux: kill dei processi con uno script di shell gennaio 6, 2008

Inviato da synthesis in : Informatica, Linux , trackback

logo_terminaleBuon 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 -1

ID=`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»

6. synthesis - febbraio 11, 2008

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!

5. sad81 - febbraio 11, 2008

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

4. synthesis - febbraio 1, 2008

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

3. sad81 - gennaio 31, 2008

cmq con il vostro kill sono almeno riuscito (sempre tramite shell purtroppo) a killare amsn bloccato (dunque grazie)

2. sad81 - gennaio 31, 2008

msg mandato con la mandriva 2008 ma in dual boot se non per virtualbox nessuna pssibilità di migrazione neanche con wine…. siete d’accordo ?

1. sad81 - gennaio 31, 2008

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…..