Come usare awk per killare una lista di processi
Vi sarà capitato la necessità di dover “killare” in un sistema unix più processi e di aver avuto la tentazione di farlo passando uno per uno il PID al comando kill usando la seguente sintassi
kill -9 <PID>
ovviamente per quanto possibile questa soluzione è a dir poco noiosa, soprattutto quando il numero di processi coinvolti è superiore a due 🙂 in tal caso se come me siete avversi a fare cose ripetitive potete fare qualcosa del genere.
In prima istanza è necessario ottenere la lista dei processi target, per farlo una via è quella di usare ad esempio una pipeline del comando ps e del comando grep :
ps -x | grep <nome del processo>
esempio:
ps -x | grep test
il risultato del comando precedente è la lista dei processi coinvolti:
PID TTY TIME CMD 42775 ttys004 0:00.04 sh test.sh 42795 ttys004 0:00.03 sh test.sh 42802 ttys004 0:00.03 sh test.sh 42807 ttys004 0:00.03 sh test.sh
a questo punto sarà necessario estrarre la lista dei pid:
ps -x | grep test | awk '{print $1}'
il cui risultato è:
42775 42795 42802 42807 44111
sarà necesasrio trasformare la lista in una riga di elementi :
ps -x | grep test | awk '{print $1}'| xargs
infine sarà possibile passarla al kill:
ps -x | grep test | awk '{print $1}'| xargs kill -9
attenzione nell’ultimo passaggio non è necessario usare un pipe ma xargs come argomento accetta il comando da eseguire:
xargs [-0oprt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]] [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]]
un’alternativa ad xargs è quella di usare la tecnica della sostituzione del comando attraverso la sintassi $(), in pratica mi calcolo la lista dei pid in un lista di testo sostituendolo al risultato del comando e la passo al kill.
kill $(ps -x | grep 'test' | awk '{print $1}')
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments