gpt4 book ai didi

go - 如何在 Go 中编写异步子收割器?

转载 作者:IT王子 更新时间:2023-10-29 01:11:20 26 4
gpt4 key购买 nike

我有一些这样的代码:

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)
}()
}

这收获了一个特定的衍生 child 的过程,但我正在寻找对于更通用的东西。

有没有办法从 my_signal 中获取 PID?我在找东西像 pid_t wait(int *status) —— golang 提供了一个函数称为 Wait4,它采用特定的 PID。

最佳答案

正如你所说,Go的syscall包有这个功能:

func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)

这似乎对你有用。来自 the BSD man page for wait(2) (请记住,Go 部分是在 Mac 上开发的!):

The wait4() call provides a more general interface for programs that need to wait for certain child processes, that need resource utilization statistics accumulated by child processes, or that require options. The other wait functions are implemented using wait4().

通过传递正确的参数,您可以使用 Wait4 实现您想要的。例如,如果您不想等待特定的 child :

If pid is -1, the call waits for any child process.

您可以在手册页中找到所需的其余信息。

关于go - 如何在 Go 中编写异步子收割器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com