Golang如何阻止signal传递给os/exec执行的命令

# 自身需求

一个启动器(通过os.exec来启动另一个进程)收到signal后需要进行一个处理逻辑再结束掉子进程,但是默认情况下父子进程同时收到了信号。

# 解决方案

cmd.SysProcAttr = &syscall.SysProcAttr{
    Setpgid: true,
}

*nix环境中, 由exec.command开启的子进程的进程组ID默认为为父进程ID,需设置子进程的进程组ID为子进程自身ID

# 参考资料

  • https://segmentfault.com/q/1010000007970306