父进程死亡时自动终止子进程

时间:2017-08-08 03:55:06

标签: linux go

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 )时,子进程不会退出()。

是否有自动终止子进程的选项?

1 个答案:

答案 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)