【问题标题】:What is the difference between "kill 0" and "kill -‍- -$$"?“kill 0”和“kill -‍- -$$”有什么区别?
【发布时间】:2013-10-15 15:16:34
【问题描述】:

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

【问题讨论】:

    标签: linux bash shell process process-group


    【解决方案1】:

    0 的进程 ID 是指执行kill 命令的进程的进程组。负进程 ID 指的是进程组,其 ID 是 proc ID 的绝对值。两者可能不同,因为进程组可能会更改。

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


    请注意,对进程中执行的程序的名称撒谎是微不足道的,因此无论如何依赖您在ps 中看到的名称通常是没有用的:

    exec -a someOtherName ./myScript
    

    【讨论】:

    • 你没有回答我剩下的问题。
    猜你喜欢
    • 2016-07-26
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2012-06-16
    相关资源
    最近更新 更多