繁体   English   中英

无法使用`syscall.Kill()`一个守护进程的Go进程

[英]Unable to `syscall.Kill()` a daemonized Go process

我在Go中创建了使用syscall.Kill()杀死进程的syscall.Kill()

但是,如果我使用fork() + setsid()使该进程失败,那么syscall.Kill()不会杀死该进程。

如果我使用shell kill那么我可以在两种情况下杀死该进程。

我尝试了不同的信号: SIGINTSIGTERMSIGKILL但是他们不会杀死守护进程。

使用系统调用守护Go进程目前无法可靠地执行 ,这就是为什么你的守护进程不可能被杀死的原因:它已被楔入(尽管我应该承认,为什么它不会因为发送SIGKILL而死而感到奇怪使内核只是破坏进程,没有尝试信号传递)。

要正确守护进程围棋过程中的一个建议使用一个包装过程(如daemon )或下运行它先进的替代init超级服务器,如systemdupstart或独立监事如runitmonit和其他人,其如果该进程没有脑祸要求成为真正的Unix守护进程,并且可能表现得像正常进程:不执行双fork + setsid技巧,不会乱用PID文件管理,能够写入其常规I / O流等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM