为了账号安全,请及时绑定邮箱和手机立即绑定

子进程接收 SIGINT,该 SIGINT 应仅由父进程处理,从而导致子进程突然终止

子进程接收 SIGINT,该 SIGINT 应仅由父进程处理,从而导致子进程突然终止

Go
GCT1015 2022-08-09 20:12:42
我正在尝试使用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

    }


查看完整回答
反对 回复 2022-08-09
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

以下是对您的问题的更完整答案 - 杀死一个孩子的过程及其在Go中的所有孩子


查看完整回答
反对 回复 2022-08-09
  • 2 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号