“kill 0”和“kill - - $$”有什么区别?

时间:2013-10-08 15:35:03

标签: linux bash shell process process-group

基本上我想要一个bash脚本进程,在收到SIGINT后,在退出之前杀死它的所有子进程。我阅读here以使用以下内容:

trap "kill -TERM -$$ ; exit 1" INT QUIT

我还读过使用kill 0

trap "kill -TERM 0 ; exit 1" INT QUIT

它们之间有什么区别,它们是否满足以下要求(如果没有,它是什么?)?:

  1. 仅杀死自己及其子级(假设它是由终端命令启动的顶级进程)。
  2. 它不会杀死同一个shell脚本的任何其他进程或实例(从单独的终端命令运行:即运行./foo.sh &然后运行./foo.sh时,查杀第二个不应该杀死第一个甚至在同一个tty)。

1 个答案:

答案 0 :(得分:1)

进程ID为0表示执行kill命令的进程的进程组。负进程ID是指进程组,其ID是进程ID的绝对值。这两者可能会有所不同,因为流程组可能会发生变化。

对于第1项,它们应该是相同的(我假设您没有手动创建或影响流程组)。项目2不是问题,因为进程ID完全独立于在进程中执行的脚本的名称。进程ID是 引用特定进程的明确方式。


请注意,在流程中执行程序的名称是微不足道的,因此依赖于ps中看到的名称通常是无用的:

exec -a someOtherName ./myScript