2013-10-08 109 views
1

基本上我想要一个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

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

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


请注意,这是微不足道的撒谎的进程中执行的程序的名称,所以它一般无用依靠你ps看到反正名称:

exec -a someOtherName ./myScript 
+0

你没有回答我的问题的其余部分。 – Matt

+0

我什么时候提过进程名或ps命令? – Matt