Linux
當 SSH 會話超時時 nohup ./a.out 死亡的真正原因是什麼?
當您
./a.out
通過 SSH 在終端中執行,然後 SSH 會話超時時,./a.out
會被終止。為什麼是這樣?有人說這是因為 SIGHUP。但是執行nohup ./a.out
還是有同樣的問題,當 SSH 會話超時時,nohup ./a.out
程序仍然被殺死。我看到有人說這是因為當父母被殺時孩子被殺。但我在其他地方看到它聲稱通常情況並非如此。
另一種解釋是 ./a.out 的標準輸出與終端相關聯。因此,在終端被殺死後,當 ./a.out 嘗試寫入終端時,它會收到一個 SIGPIPE,這將導致它被殺死。
nohup ./a.out
SSH超時時當機的真正原因是什麼?這是我正在執行的實際命令:
nohup ./a.out |& tee logs.out
在您的情況下,
tee logs.out
寫入終端,並在 SSH 連接關閉後嘗試寫入時被終止。這反過來也會導致nohup
被殺死,下一次a.out
寫入其標準輸出。如果你想
nohup ./a.out
生存,你應該在沒有管道的情況下在後台執行它,並單獨觀察nohup.out
文件:nohup ./a.out & tail -f nohup.out
或者,使用您的日誌文件,
nohup ./a.out > logs.out & tail -f logs.out