バックグラウンドでプロセスを開始するコマンドを使用するリモートセッションを介してシェルスクリプトを起動しようとしています。
nohup python3 run.py > nohup.out &
リモートセッションが閉じられると、次のメッセージでプロセスが終了します。
キャプチャ信号 SIGHUP
SIGHUPがキャプチャされましたが保護されていません。やめる。
バックグラウンドで起動すると、プロセスが終了する理由を理解できません。ノーサンプ&?
答え1
Pythonプログラムが元に戻されますnohup
。
nohup
ハング信号を無視し、SIG_IGN
同じプロセスでプログラムをチェーンロードします。
あなたのPythonプログラム時間に合わせてリセット信号の信号処理を中止し、独自の信号ハンドラを取り付けます。ハンドラは、内部機能(私が見たものであれば、いくつかの欠陥のある仮定に基づいてうまく設計されていない機能)を確認し、切断信号を受信した後、適切なアクションはメッセージを印刷して終了することを決定します。
あなたのPythonプログラムは設計上実行可能ではありませんnohup
。ジョブ制御シェルとPOSIXセッション/ジョブの意味スキームを持つシステムでは、シェルがジョブについてdisown
全く知らないため、最初に中断シグナルを送信するようにジョブを指定する必要があります。
(これでもsystemd OSでは十分ではありません。systemdの人々がユーザースペースのログインセッションメカニズムについていくつかの研究を行ったので、systemdのメカニズムがログインセッションの終わりに切断するのではなく、システムをシャットダウンするように指示することを確認する必要があります。ログアウトすると起動しません。)