我有一些像这样的代码:
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关闭my_signal?我正在寻找一些东西 像pid_t wait(int * status) - golang提供了一个函数 称为Wait4,它采用特定的PID。
答案 0 :(得分:2)
正如你所说,Go的系统调用包具有以下功能:
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)
这似乎对你有用。来自the BSD man page for wait(2)
(请记住,Go部分是在Mac上开发的!):
wait4()调用为程序提供了更通用的接口 需要等待某些需要资源的子进程 子进程累积的利用率统计数据 要求选择。 其他等待函数使用 wait4()强>
通过传递正确的参数,您可以使用Wait4
实现所需的目标。例如,如果您不想等待特定的孩子:
如果pid为-1,则呼叫会等待任何子进程。
您可以在手册页中找到所需的其他信息。