コマンドを使用してバックグラウンドでプロセスを開始するリモートセッションを介してシェルスクリプトを開始してみました。
Nohup python3 run.py > Nohup.out &
リモートセッションが閉じられると、プロセスは次のメッセージで強制終了されます。
シグナルSIGHUPをキャッチしました
SIGHUPはキャッチされましたがデーモン化されていません。終了します。
わかりません。 Nohup&を使用してバックグラウンドで開始したときにプロセスが強制終了されるのはなぜですか?
Nohup
を元に戻します。Nohup
はSIG_IGN
のハングアップシグナルを無視し、同じプロセスでプログラムをチェーンロードします。
あなたのPythonプログラムは、ハングアップシグナルのシグナルハンドリングを即座にリセットし、独自のシグナルハンドラーをインストールします。このハンドラーは、内部機能(十分に設計されておらず、私が見たものである場合、いくつかの欠陥のある仮定に基づいている)。ハングアップシグナルの受信時の適切なアクションは、そのメッセージを出力して終了することであると判断します。
あなたのPythonプログラムの設計はNohup
- ableではありません。ジョブ制御シェルとPOSIXセッション/ジョブセマンティクスを備えたシステムでは、disown
ingである必要がありますシェルがハングアップシグナルを送信することを最初に知らないようにするためのジョブ。
(それでも、systemdオペレーティングシステムでは十分ではありません。systemdの人々は、ユーザー空間のログインセッションメカニズムに少し耳を傾けているため、ハングアップではなく、システムのシャットダウンを通知するsystemdのメカニズムがすべてのログアウト時のログインセッションも開始されません。)