在杀死父进程后将标准输入传递给子进程

3

我有以下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。有没有办法解决这个问题?


3
启动子进程后,父进程需要做些什么?通常情况下,您可以使用 execve 系统调用(在 Go 中为 syscall.Exec)来实现这个功能。 - JimB
使用syscall.Exec就是答案!非常感谢。 - Dan Doe
1个回答

0
从我的经验来看,我不知道有什么办法可以绕过Stdin。只有StdoutStderr可以这样工作。
另一种方法是释放父进程正在使用的资源(即尽量使其轻量化),然后让它等待子进程的执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接