Ssh
nohup 在我關閉 SSH 終端時結束,並且在執行時不顯示在 ps/job 上
我有一個 AWS EC2 Ubuntu 20.04 實例,通過 puTTY SSH 訪問。在非 root 上通過以下命令通過OpenMPI執行 Python 程序:
nohup mpirun python3 job.py
當外殼打開時,它會正常執行。即使使用
ps
並且job
沒有顯示該過程,我也可以通過 nohup.out 和更改的文件系統看到它在執行數小時後仍在工作。當我關閉外殼時,nohup 程序結束。我可能還應該注意,當我執行上面的 nohup 命令時,我無法再輸入任何內容(游標變為空白)。所以當我跑到上面時
ps
,job
我不得不打開第二個外殼。我以前從未使用過 nohup 並認為這是不正常的。我調查了 nohup.out 文件是否有錯誤,但沒有發現任何內容。
所以 TLDR:
- 關閉 SSH 實例 (puTTY) 結束 nohup 程序
- ps 和 job 沒有列出 nohup 程序,即使我知道它正在執行
如果需要,我可以回答更多問題
jobs
只能顯示目前 shell 的作業。Bare
ps
顯示具有與目前使用者相同的有效使用者 ID 和與呼叫者相同的控制終端的程序。例如,您需要ps -e
查看其他程序(但不一定是作業系統中的所有程序)。如果你跑
nohup something … &
那麼您將能夠執行
jobs
或ps
在同一個 shell 中。不要指望看到nohup
。它的任務是以something
特定的方式執行,它不需要持續。期待看到something
。所以它可能是你的過程倖存下來,而你只是假設它已經死了。或者它可能真的死了。請參閱為什麼程序被殺死
nohup
?那裡的答案提到了兩種可能性:
KillUserProcesses=yes
在logind.conf
(系統);- 或者生成的程序實現自己的處理程序
SIGHUP
,覆蓋nohup
.更多資訊:和之間的區別
nohup``disown``&
。如果我理解正確,disown
如果生成的程序為SIGHUP
. 像這樣使用它:nohup something … & disown