タグ付けされた質問 「sigterm」


7
SIGTERMシグナルを正常に処理する方法は?
Pythonで書かれたそのような簡単なデーモンがあるとしましょう: def mainloop(): while True: # 1. do # 2. some # 3. important # 4. job # 5. sleep mainloop() そしてstart-stop-daemon、デフォルトでSIGTERM(TERM)シグナルを送信するを使用してデーモン化します--stop。 現在実行されているステップがであるとしましょう#2。そして、この瞬間にTERM信号を送信しています。 実行はすぐに終了します。 を使用してシグナルイベントを処理できることがわかりましたsignal.signal(signal.SIGTERM, handler)が、それでも現在の実行が中断され、コントロールがに渡されhandlerます。 だから、私の質問は-現在の実行を中断せずTERMに、別のスレッド(?)でシグナルを処理shutdown_flag = Trueしmainloop()て、正常に停止するように設定できるようにすることは可能ですか?

7
プロセスを正常にシャットダウンするために、どのような順序でシグナルを送信する必要がありますか?
別の質問のこの回答に対するコメントで、コメント投稿者は次のように述べています。 どうしても必要な場合を除いて、kill-9を使用しないでください。SIGKILLをトラップできないため、強制終了されたプログラムは、一時ファイルを消去するなどのシャットダウンルーチンを実行できません。最初にHUP(1)、次にINT(2)、次にQUIT(3)を試してください。 原則的には同意しますSIGKILLが、残りは私にとってのニュースです。によって送信されるデフォルトのシグナルkillがSIGTERMであるとすると、任意のプロセスを正常にシャットダウンするために最も一般的に期待されるシグナルであると思います。また、SIGHUPデーモンに「構成ファイルを再読み取り」するように指示するなど、終了しない理由で使用されることもあります。そして、SIGINT(Ctrl-Cで通常発生するのと同じ割り込みですよね?)は、本来あるべきほど広くサポートされていないか、かなり不自然に終了しているように思われます。 それSIGKILLが最後の手段であるとすると、可能な限り正常にシャットダウンするために、どのシグナルをどの順序で任意のプロセスに送信する必要がありますか? 可能であれば、(個人的な好みや意見を超えて)裏付けとなる事実や参考文献であなたの答えを実証してください。 注:bash / Cygwinの検討を含むベストプラクティスに特に興味があります。 編集:これまでのところ、INTやQUITについては誰も言及していないようで、HUPについての言及は限られています。これらを整然としたプロセス殺害に含める理由はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.