В скрипте bash я обычно использую trap для очистки порожденных процессов:
function cleanup()
{
jobs -l
jobs -p | xargs -r -I {} kill -TERM {}
jobs -l
echo "do something after kill all jobs."
}
trap cleanup EXIT
Однако это не работает для групп процессов:
function cleanup()
{
jobs -l
jobs -p | xargs -r -I {} kill -TERM {}
jobs -l
echo "do something after kill all jobs."
}
trap cleanup EXIT
(sleep 100 | tee /tmp/sleep_test.log) | tee sleep_test2.log &
ps -ax -o pid,pgid,ppid,args | grep sleep
jobs -l
sleep 1
the jobs -p
выдать ppid группы процессов (sleep 100 | tee ...)
и процесс tee ...
Группа процессов не может быть уничтожена, как указано выше. Это нужно сделать kill -TERM -PGID
. Есть ли простой способ разрешить заданиям выводить группу процессов PGID? Или есть какая-либо команда, способная уничтожить группу процессов через PPID и обработать PID с помощью единого интерфейса?
update: kill -TERM 0
здесь не работает, так как она также уничтожает себя. Но мне все равно нужно что-то делать после того, как убить все задания.