Linux

當 SSH 會話超時時 nohup ./a.out 死亡的真正原因是什麼?

  • July 15, 2021

當您./a.out通過 SSH 在終端中執行,然後 SSH 會話超時時,./a.out會被終止。為什麼是這樣?有人說這是因為 SIGHUP。但是執行nohup ./a.out還是有同樣的問題,當 SSH 會話超時時,nohup ./a.out程序仍然被殺死。

我看到有人說這是因為當父母被殺時孩子被殺。但我在其他地方看到它聲稱通常情況並非如此。

另一種解釋是 ./a.out 的標準輸出與終端相關聯。因此,在終端被殺死後,當 ./a.out 嘗試寫入終端時,它會收到一個 SIGPIPE,這將導致它被殺死。

nohup ./a.outSSH超時時當機的真正原因是什麼?

這是我正在執行的實際命令: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

引用自:https://unix.stackexchange.com/questions/658535