Убив всю группу процессов вместо bash
(родитель), вы также можете отправить сигнал уничтожения всем дочерним элементам.
Примеры синтаксиса:
kill -SIGTERM -$!
kill -- -$!
Пример:
bash -c 'sleep 50 | sleep 40' & sleep 1; kill -SIGTERM -$!; wait; ps -ef | grep -c sleep
[1] 14683
[1]+ Terminated bash -c 'sleep 50 | sleep 40'
1
Обратите внимание, что wait
здесь ожидает эффективного уничтожения bash, что занимает несколько миллисекунд.
Также обратите внимание, что конечным результатом (1) является сам «grep sleep». Результат 3 покажет, что это не работает, так как все еще будут работать два дополнительных спящих процесса.
Руководство kill
упоминает:
-n
where n is larger than 1. All processes in process group n are signaled.
When an argument of the form '-n' is given, and it is meant to denote a
process group, either the signal must be specified first, or the argument
must be preceded by a '--' option, otherwise it will be taken as the signal
to send.