Ssh

nohup 在我關閉 SSH 終端時結束,並且在執行時不顯示在 ps/job 上

  • November 25, 2020

我有一個 AWS EC2 Ubuntu 20.04 實例,通過 puTTY SSH 訪問。在非 root 上通過以下命令通過OpenMPI執行 Python 程序:

nohup mpirun python3 job.py

當外殼打開時,它會正常執行。即使使用ps並且job沒有顯示該過程,我也可以通過 nohup.out 和更改的文件系統看到它在執行數小時後仍在工作。

當我關閉外殼時,nohup 程序結束。我可能還應該注意,當我執行上面的 nohup 命令時,我無法再輸入任何內容(游標變為空白)。所以當我跑到上面時psjob我不得不打開第二個外殼。我以前從未使用過 nohup 並認為這是不正常的。

我調查了 nohup.out 文件是否有錯誤,但沒有發現任何內容。

所以 TLDR:

  1. 關閉 SSH 實例 (puTTY) 結束 nohup 程序
  2. ps 和 job 沒有列出 nohup 程序,即使我知道它正在執行

如果需要,我可以回答更多問題

jobs只能顯示目前 shell 的作業。

Bareps 顯示具有與目前使用者相同的有效使用者 ID 和與呼叫者相同的控制終端的程序。例如,您需要ps -e查看其他程序(但不一定是作業系統中的所有程序)。

如果你跑

nohup something … &

那麼您將能夠執行jobsps在同一個 shell 中。不要指望看到nohup。它的任務是以something特定的方式執行,它不需要持續。期待看到something

所以它可能是你的過程倖存下來,而你只是假設它已經死了。或者它可能真的死了。請參閱為什麼程序被殺死nohup那裡的答案提到了兩種可能性:

  • KillUserProcesses=yeslogind.conf(系統);
  • 或者生成的程序實現自己的處理程序SIGHUP,覆蓋nohup.

更多資訊:和之間區別nohup``disown``&。如果我理解正確,disown如果生成的程序為SIGHUP. 像這樣使用它:

nohup something … &
disown

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