Golang 中父进程死时如何自动终止子进程?
子进程由 exec.Command()调用。
例如,
父进程pid是:28290,有三个子进程:32062,32473,33455。
#ps axo pid,ppid,pgid | grep 28290
PID PPID PGID
28290 1 28289
32062 28290 28289
32473 28290 28289
33455 28290 28289
四个过程具有相同的PGID = 28289。
当我杀死父进程28290(杀死linux中的28290,kill -9 28290 )时,子进程不会退出()。
是否有自动终止子进程的选项?
答案 0 :(得分:0)
在运行命令之前设置进程组ID,并通过-pid kill,注意减号。
// set pgid so all child processes can be killed together
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
...
// kill -pgid (-pid)
syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)