Quando eles estão correndo
Parece que você pode fazer isso apenas com kill
a saída de jobs -p
.
Exemplo
$ sleep 1000 &
[1] 21952
$ sleep 1000 &
[2] 21956
$ sleep 1000 &
[3] 21960
Agora eu 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 se foram.
$ jobs
$
Quando eles estão parados
Se você tiver trabalhos que estão parados, não executando, faça isso.
Exemplo
$ kill $(jobs -p)
$ jobs
[1]+ Stopped sleep 1000
[2]- Stopped sleep 1000
[3] Stopped sleep 1000
OK, para que não os matasse, mas é porque o sinal de matança não pode ser tratado pelo próprio processo, ele parou. Então, diga ao sistema operacional para matar. É para isso que -9
serve.
$ 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 outros estão parados
Se você tiver um conjunto misto de processos em que alguns são interrompidos e outros estão em execução, você pode fazer o kill
primeiro, seguido de a kill -9
.
$ kill $(jobs -p); sleep <time>; \
kill -18 $(jobs -p); sleep <time>; kill -9 $(jobs -p)
Estendendo o tempo levemente, se você precisar de mais para permitir que os processos parem primeiro.
Signals
Nem um HUP (-1) nem um SIGTERM (-15) para matar terão êxito. Mas por que? Isso ocorre porque esses sinais são mais gentis no sentido de que eles estão dizendo para o aplicativo se encerrar. Mas, como o aplicativo está parado, não pode processar esses sinais. Então, seu único curso é usar um SIGKILL (-9).
Você pode ver todos os sinais kill
fornecidos 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 que você dê uma olhada na página de manual de sinais man 7 signal
,.
+
símbolo para o primeiro processo e-
símbolo para o segundo processo e nenhum símbolo para o terceiro?