基本上我想要一个bash脚本进程,在收到SIGINT
后,在退出之前杀死它的所有子进程。我阅读here以使用以下内容:
trap "kill -TERM -$$ ; exit 1" INT QUIT
我还读过使用kill 0
:
trap "kill -TERM 0 ; exit 1" INT QUIT
它们之间有什么区别,它们是否满足以下要求(如果没有,它是什么?)?:
./foo.sh &
然后运行./foo.sh
时,查杀第二个不应该杀死第一个甚至在同一个tty)。答案 0 :(得分:1)
进程ID为0表示执行kill
命令的进程的进程组。负进程ID是指进程组,其ID是进程ID的绝对值。这两者可能会有所不同,因为流程组可能会发生变化。
对于第1项,它们应该是相同的(我假设您没有手动创建或影响流程组)。项目2不是问题,因为进程ID完全独立于在进程中执行的脚本的名称。进程ID是 引用特定进程的明确方式。
请注意,在流程中执行程序的名称是微不足道的,因此依赖于ps
中看到的名称通常是无用的:
exec -a someOtherName ./myScript