ホームページ >Java >&#&チュートリアル >Java でプログラム終了シグナル、特に SIGKILL を適切に処理するにはどうすればよいですか?
Java での終了シグナルの処理
プログラムが終了シグナルを受信したとき、データの損失や損失を防ぐためにクリーン シャットダウンを実行することが重要です。システムの不一致。この記事では、Java で SIGKILL シグナルを適切に処理する方法について説明します。
SIGKILL について
SIGKILL はプログラムを即座に終了させる回復不可能なシグナルであり、プログラムを実行することは不可能です。それを処理するプログラム。 SIGTERM などの他のシグナルとは異なり、SIGKILL はアプリケーションによってインターセプトしたり処理したりすることはできません。
SIGTERM の処理
SIGKILL は処理できませんが、SIGTERM は回復可能なシグナルであり、正常なシャットダウン。プログラムは、このシグナルを受信したときに必要なクリーンアップ タスクを実行するためにシャットダウン フックを登録できます。シャットダウン フックの例を次に示します。
public class TestShutdownHook { public static void main(String[] args) throws InterruptedException { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("Shutdown hook ran!"); } }); while (true) { Thread.sleep(1000); } } }
このプログラムは、「シャットダウン フックが実行されました!」と出力します。シャットダウン フックが SIGTERM (kill -15) で呼び出されたとき。
Handling SIGKILL
残念ながら、SIGKILL を適切に処理する直接的な方法はありません。外部手段によってのみ処理できます。 1 つの方法は、メイン プログラムを監視し、予期せず終了した場合に必要なアクションを実行するラッパー スクリプトを使用することです。
#!/usr/bin/env bash java TestShutdownHook wait # notify your other app that you quit echo "TestShutdownHook quit"
このスクリプトはメイン プログラムを起動し、終了するのを待ちます。メインプログラムが SIGKILL を受信して予期せず終了した場合、スクリプトはこれを検出し、それに応じて別のアプリケーションに通知します。
結論
Java では SIGKILL を適切に処理することは直接不可能です。ただし、その動作を理解し、外部メカニズムを使用して異常終了に対処することは、データの整合性とシステムの安定性を確保するのに役立ちます。
以上がJava でプログラム終了シグナル、特に SIGKILL を適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。