Когда они бегут
Похоже, вы можете просто сделать это с помощью kill
и вывод jobs -p
.
пример
$ sleep 1000 &
[1] 21952
$ sleep 1000 &
[2] 21956
$ sleep 1000 &
[3] 21960
Теперь у меня есть 3 фальшивых задания.
$ jobs
[1] Running sleep 1000 &
[2]- Running sleep 1000 &
[3]+ Running sleep 1000 &
Убей их всех так:
$ kill $(jobs -p)
[1] Terminated sleep 1000
[2]- Terminated sleep 1000
[3]+ Terminated sleep 1000
Подтверждая, что они все ушли.
$ jobs
$
Когда они остановлены
Если у вас есть задания, которые остановлены, но не выполняются, вы делаете это вместо этого.
пример
$ kill $(jobs -p)
$ jobs
[1]+ Stopped sleep 1000
[2]- Stopped sleep 1000
[3] Stopped sleep 1000
Хорошо, так что это не убило их, но это потому, что сигнал уничтожения не может быть обработан самим процессом, он остановлен. Так что скажите ОС сделать убийство вместо этого. Вот для чего -9
.
$ kill -9 $(jobs -p)
[1]+ Killed sleep 1000
[2]- Killed sleep 1000
[3] Killed sleep 1000
Так-то лучше.
$ jobs
$
Когда некоторые работают, а некоторые остановлены
Если у вас смешанный пакет процессов, некоторые из которых остановлены, а некоторые запущены, вы можете выполнить kill
сначала, а затем - kill -9
.
$ kill $(jobs -p); sleep <time>; \
kill -18 $(jobs -p); sleep <time>; kill -9 $(jobs -p)
Немного продлите время, если вам нужно больше, чтобы процессы сначала остановились.
сигналы
Ни HUP (-1), ни SIGTERM (-15) убить не удастся. Но почему? Это потому, что эти сигналы более добрые в том смысле, что они говорят приложению прекратить работу. Но поскольку приложение находится в остановленном состоянии, оно не может обрабатывать эти сигналы. Таким образом, вы только использовать SIGKILL (-9).
Вы можете увидеть все сигналы, которые kill
обеспечивает 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
Если вы хотите узнать больше о различных сигналах, я настоятельно рекомендую взглянуть на справочную страницу по сигналам man 7 signal
.
+
символ для первого процесса и-
символ для второго процесса и нет символа в третьем?