Linux “与”的区别是什么;杀死0“;及;杀死-‍;--$$&引用;?

Linux “与”的区别是什么;杀死0“;及;杀死-‍;--$$&引用;?,linux,bash,shell,process,process-group,Linux,Bash,Shell,Process,Process Group,基本上,我想要一个bash脚本进程,在收到一个SIGINT后,在退出之前杀死它的所有子进程。我阅读时使用了以下内容: trap "kill -TERM -$$ ; exit 1" INT QUIT 我还阅读了使用杀死0: trap "kill -TERM 0 ; exit 1" INT QUIT 它们之间的区别是什么?它们是否满足以下要求(如果不满足,则满足什么要求?): 只杀死自身及其子进程(假设它是由终端命令启动的顶级进程) 它不会杀死同一shell脚本的任何其他进程或实例(从单独的终端

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

trap "kill -TERM -$$ ; exit 1" INT QUIT
我还阅读了使用
杀死0

trap "kill -TERM 0 ; exit 1" INT QUIT
它们之间的区别是什么?它们是否满足以下要求(如果不满足,则满足什么要求?):

  • 只杀死自身及其子进程(假设它是由终端命令启动的顶级进程)
  • 它不会杀死同一shell脚本的任何其他进程或实例(从单独的终端命令运行:即,当运行
    /foo.sh&
    然后运行
    /foo.sh
    时,杀死第二个进程或实例不应杀死第一个进程或实例,即使在同一tty中也是如此)

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

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


    请注意,谎报进程中执行的程序的名称并不重要,因此依赖
    ps
    中的名称通常是无用的:

    exec -a someOtherName ./myScript
    

    你没有回答我剩下的问题。