Quando estão a correr
Parece que você pode fazer isso com kill
e a saída de jobs -p
.
Exemplo
$ sleep 1000 &
[1] 21952
$ sleep 1000 &
[2] 21956
$ sleep 1000 &
[3] 21960
Agora tenho 3 trabalhos falsos em execução.
$ jobs
[1] Running sleep 1000 &
[2]- Running sleep 1000 &
[3]+ Running sleep 1000 &
Mate todos eles assim:
$ kill $(jobs -p)
[1] Terminated sleep 1000
[2]- Terminated sleep 1000
[3]+ Terminated sleep 1000
Confirmando que todos eles desapareceram.
$ jobs
$
Quando eles estão parados
Se você tem trabalhos que estão parados, não está sendo executado, faça isso.
Exemplo
$ kill $(jobs -p)
$ jobs
[1]+ Stopped sleep 1000
[2]- Stopped sleep 1000
[3] Stopped sleep 1000
OK, então isso não os matou, mas isso é porque o sinal de kill não pode ser manipulado pelo processo em si, está parado. Então diga ao SO para fazer a matança em seu lugar. Isso é o que é um -9
.
$ kill -9 $(jobs -p)
[1]+ Killed sleep 1000
[2]- Killed sleep 1000
[3] Killed sleep 1000
Isso é melhor.
$ jobs
$
Quando alguns estão em execução e alguns estão parados
Se você tiver uma mescla de processos em que alguns estão parados e alguns estão em execução, você pode fazer um kill
primeiro seguido por um kill -9
.
$ kill $(jobs -p); sleep <time>; \
kill -18 $(jobs -p); sleep <time>; kill -9 $(jobs -p)
Estendendo um pouco o tempo, se você precisar de mais para permitir que os processos parem antes.
Sinais
Nem um HUP (-1) nem um SIGTERM (-15) para matar serão bem-sucedidos. Mas por que? Isso é porque esses sinais são mais gentis no sentido de que eles estão dizendo ao aplicativo para finalizar a si mesmo. Mas como o aplicativo está em um estado parado, ele não pode processar esses sinais. Então você só é claro que é usar um SIGKILL (-9).
Você pode ver todos os sinais que kill
fornece com kill -l
.
$ kill -l | column -t
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Se você quiser aprender ainda mais sobre os vários sinais, eu recomendo strongmente que você dê uma olhada na página de manual de sinais, man 7 signal
.