我有一些go代码,像这样:
cmd = exec.Command(command)
//...
cmd.Run()
func reapChild(cmd) {
sigc := make(chan os.Signal, 1)
signal.Notify(sigc, syscall.SIGCHLD)
go func() {
my_signal := <- sigc
log.Infof("appstore: reapChildren: got a SIGCHLD signal")
cmd.Wait()
signal.Stop(sigc)
}()
}
这收获了一个特定的衍生子进程,但我正在寻找
是否有办法得到PID off my_signal?我在找东西与pid_t wait(int *status)类似,golang提供了一个函数
正如您所说,Go的系统调用包具有以下功能:
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)
这似乎对你有用。来自wait(2)
的BSD手册页(记住Go部分是在mac上开发的!):
wait4()调用为以下程序提供了一个更通用的接口需要等待某些需要资源的子进程由子进程累积的利用率统计信息需要选择。其他等待函数使用wait4 () .
通过传递正确的参数,您可以实现您想要的Wait4
。例如,如果您不想等待特定的子进程:
如果pid为-1,则调用等待任何子进程。
你可以在手册页找到你需要的其他信息。