簡體   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