我正在尝试使用stdpipes在golang中管理应用程序(需要通过某个过程关闭,在这种情况下可以拯救世界)。这是我试图实现的目标的一个简单示例,但我有一个问题对我来说非常具体,但对其他人来说也可能很有趣(也许你可以建议如何推广它)。我还添加了一个名为的函数,该函数创建一个goroutine,并在发送终止信号时管理程序的停止。interruptListener脚本的正常功能:启动我的世界服务器等待 40 秒,然后通过 std 发出“stop”命令(在本例中,它按预期打印有关保存过程的所有日志)测试用例(用于演示问题出在哪里):启动我的世界服务器在脚本发出停止命令之前,用户发送ctrl+ c(在这种情况下,它应该完成有关保存过程的日志,然后退出,但它没有......似乎在收到终止信号后返回假,所以它只是退出)scanner.Scan()您知道为什么会发生这种情况吗?我应该研究什么才能找到解决方案?我真的很迷茫,我已经花了8个多小时与所有可能的代码组合...
2 回答

跃然一笑
TA贡献1826条经验 获得超6个赞
感谢在评论中回答的人,这是一个可以接受的解决方案(仍然不完美,如评论中所解释的那样)
只需在执行之前添加以下几行:cmd.Start()
// launch as new process group so that signals (ex: SIGINT) are not sent also the the child process
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP, // windows
// Setpgid: true, // linux
}
- 2 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消