您的 Python 程式會撤銷nohup.

您的 Python 程式會撤銷nohup.

我嘗試透過遠端會話啟動 shell 腳本,該會話使用命令在背景啟動進程。

nohup python3 run.py > nohup.out &

當遠端會話關閉時,進程將被終止並顯示以下訊息:

捕獲信號 SIGHUP

SIGHUP 已捕獲但未被守護。退出。

我不明白;為什麼進程在後台啟動時會被殺死諾哈普 &

答案1

您的 Python 程式會撤銷nohup.

nohup忽略掛斷訊號,SIG_IGN然後在同一進程中鍊式載入您的程式。

你的Python程序及時重置掛斷訊號的訊號處理,安裝自己的訊號處理程序。這個處理程序檢查一個內部函數(該函數設計得不是很好,基於一些有缺陷的假設,如果它是我所見過的),並決定在收到掛斷信號時採取適當的行動方針是打印該訊息並退出。

你的Python程式在設計上是不可行nohup的。在具有作業控制 shell 和 POSIX 會話/作業語義的系統上,您需要disowning 作業,以便 shell 永遠不會知道它,從而首先向它發送掛斷訊號。

(即使這在 systemd 作業系統上還不夠。因為 systemd 的人已經對他們的用戶空間登入會話機製做了一些研究,所以您還需要確保 systemd 的機制發出系統關閉而不是掛斷的信號,以每次登出時的登入工作階段也不會啟動。

進一步閱讀

相關內容