我有以下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
系统调用(在 Go 中为syscall.Exec
)来实现这个功能。 - JimB