如何杀死陷阱中的进程组?

问题描述 投票:0回答:1

在bash脚本中,我通常使用陷阱来清理生成的进程:

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

jobs -p给出(sleep 100 | tee ...)的进程组的小指和tee ...的进程。无法如上所述杀死进程组。它需要做kill -TERM -PGID。有什么简单的方法可以让作业输出进程组PGID?还是有任何命令可以通过统一的接口通过PPID和进程PID终止进程组?

更新:kill -TERM 0在这里不起作用,因为它也会杀死自己。但是在杀死所有工作之后我仍然需要做一些事情。

linux bash pid
1个回答
-1
投票

您需要wait进行后台作业:

wait
© www.soinside.com 2019 - 2024. All rights reserved.