【发布时间】:2015-12-12 13:33:18
【问题描述】:
我在 Go 中有以下代码:
cmd := exec.Command(...)
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Run()
它生成另一个 Go 程序作为子进程,并将其 Stdin、Stdout 和 Stderr 设置为父进程。子进程生成后,我想通过父进程中的os.Exit() 或子进程中的syscall.Kill(os.Getppid(), syscall.SIGTERM) 杀死父进程。在我杀死父母之后出现了问题。它似乎关闭了 Stdin,因此子进程无法从生成父进程的终端接收输入。
我可以在杀死父级之前接收到子级的输入,所以绝对是杀死父级的动作会关闭 Stdin。有什么办法可以解决这个问题吗?
【问题讨论】:
-
启动孩子后家长需要做些什么吗?通常这就是你使用
execve系统调用(syscall.Execin go)。 -
使用 syscall.Exec 就是答案!非常感谢。