Come usare awk per killare una lista di processi

TUTORIAL

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}')
Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form