SSH端末を閉じるとnohupが終了し、実行時にps / jobに表示されません。

SSH端末を閉じるとnohupが終了し、実行時にps / jobに表示されません。

PuTTY SSHを介してアクセスされるAWS EC2 Ubuntu 20.04インスタンスがあります。次のようにPythonプロセスを実行します。MPIを開く次のコマンドを渡します。ルートでない場合:

nohup mpirun python3 job.py

シェルが開いていると正常に動作します。プロセスがおよびpsを使用して表示されるわけではありませんが、jobnohup.outおよび変更されたファイルシステムを介して数時間実行した後でもまだ機能していることがわかります。

シェルを閉じると、nohup プロセスが終了します。また、上記のnohupコマンドを実行すると、もはや何も入力できないことに注意してください(カーソルが空です)。それでpsそこに走って行った時、job二番目の殻を開かなければなりませんでした。私は以前nohupを使ったことがなかったし、これは奇妙だと思いました。

nohup.outファイルにエラーがあるかどうかを調べたところ、何も記録されていないことがわかりました。

要約すると、次のようになります。

  1. SSHインスタンス(puTTY)を閉じてnohupプロセスを終了します。

  2. psとjobがnohupプロセスが実行中であることを知っているにもかかわらず、そのプロセスはリストされません。

必要に応じて追加の質問に回答できます。

ベストアンサー1

jobs現在のシェルに対するアクションのみを表示できます。

ないps 現在のユーザーと同じ有効なユーザーIDと、呼び出し元と同じ制御端末を持つプロセスを表示します。。たとえば、ps -e他のプロセスを確認する必要があります(ただし、オペレーティングシステムのすべてのプロセスが必ずしも必要ではありません。)。

走れば

nohup something … &

その後、同じシェルでjobsまたはを実行できますps。それを見ることを期待しないでくださいnohup。その使命は特定の方法で行動することであり、something持続する必要はありません。見ると予想されますsomething

したがって、プロセスが生き残った可能性があり、プロセスが死んだと仮定した可能性があります。それとも本当に死んでいるかもしれません。バラよりプロセスが終了するのはなぜですかnohupこれ回答2つの可能性が挙げられます。

  • KillUserProcesses=yeslogind.conf(システム)から。
  • または生成されたプロセスSIGHUPnohup

詳しくはこちらをご覧ください。nohup間のdisown違い&。私が正しく理解したら、disown生成されたプロセスが独自のハンドラを実装するのに役立ちますSIGHUP。次のように使用してください。

nohup something … &
disown

おすすめ記事