
我嘗試透過遠端會話啟動 shell 腳本,該會話使用命令在背景啟動進程。
nohup python3 run.py > nohup.out &
當遠端會話關閉時,進程將被終止並顯示以下訊息:
捕獲信號 SIGHUP
SIGHUP 已捕獲但未被守護。退出。
我不明白;為什麼進程在後台啟動時會被殺死諾哈普 &?
答案1
您的 Python 程式會撤銷nohup
.
nohup
忽略掛斷訊號,SIG_IGN
然後在同一進程中鍊式載入您的程式。
你的Python程序及時重置掛斷訊號的訊號處理,安裝自己的訊號處理程序。這個處理程序檢查一個內部函數(該函數設計得不是很好,基於一些有缺陷的假設,如果它是我所見過的),並決定在收到掛斷信號時採取適當的行動方針是打印該訊息並退出。
你的Python程式在設計上是不可行nohup
的。在具有作業控制 shell 和 POSIX 會話/作業語義的系統上,您需要disown
ing 作業,以便 shell 永遠不會知道它,從而首先向它發送掛斷訊號。
(即使這在 systemd 作業系統上還不夠。因為 systemd 的人已經對他們的用戶空間登入會話機製做了一些研究,所以您還需要確保 systemd 的機制發出系統關閉而不是掛斷的信號,以每次登出時的登入工作階段也不會啟動。