Background-Process
為什麼 nohup 後台程序被殺死?
我嘗試通過遠端會話啟動一個 shell 腳本,它使用命令在後台啟動一個程序。
nohup python3 run.py > nohup.out &
當遠端會話關閉時,程序將被以下消息殺死:
捕捉到信號 SIGHUP
SIGHUP 被擷取但未被守護。退出。
我不明白; **為什麼程序在後台使用nohup &**啟動時會被殺死?
您的 Python 程序撤消了
nohup
.
nohup
忽略掛斷信號,SIG_IGN
然後在同一程序中連結載入您的程序。您的 Python 程序會立即重置掛斷信號的信號處理,安裝自己的信號處理程序。該處理程序檢查一個內部函式(設計得不是很好,基於一些有缺陷的假設,如果它是我所看到的)並決定在收到掛斷信號時適當的操作過程是列印該消息並退出。
您設計的 Python 程序是不可
nohup
用的。在具有作業控制 shell 和 POSIX 會話/作業語義的系統上,您需要disown
執行作業,以便 shell 永遠不會知道它首先向它發送掛斷信號。(即使在 systemd 作業系統上這還不夠。因為 systemd 的人已經對他們的使用者空間登錄會話機製做了一點點豬耳朵,你還需要確保 systemd 發出系統關閉而不是掛斷信號的機制,以每次註銷時的登錄會話也不會啟動。)
進一步閱讀