問題タブ [shutdown-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - シャットダウン フックがエグゼキュータを強制終了していない
次のコードがあります。
これを実行すると、次のコンソール出力が得られます。
これを実行すると、アプリケーションは決して終了しません。代わりに、5 秒ごとに「Task is running!」という新しい println が表示されます。メイン スレッドがメソッドの最後に到達し、「Initializing shutdown...」を出力し、追加されたシャットダウン フックを呼び出し、executor を強制終了し、最後に「Shutdown hook is finished!」を出力すると予想していました。main
代わりに、「タスクは実行中です」というメッセージが表示され続け、プログラムが終了することはありません。何が起きてる?
java - Java スレッドとシャットダウン フック
興味深い問題に遭遇しました。Java でスレッドが呼び出した場合、 をSystem.exit()介して参加できないようThread.join()です。
アプリケーションの後にシャットダウン フックを使用してクリーンアップしたい場合、次のような問題が発生します。
アイデアは、スレッドがそれぞれのリソースを終了する前に、それらのリソースを閉じることを保証することです。問題は、シャットダウン フックを呼び出すことができる 3 つの状況があることです。彼らです:
- ユーザーが [ctrl] + [C] を押します。
- リーダー スレッドが完了し、 を呼び出します
System.exit()。 - 書き込みスレッドが完了し、 を呼び出します
System.exit()。
ユーザーが [ctrl] + [C] を押す最初のケースは問題なく動作します。しかし、他の 2 つのケースのいずれにおいても、シャットダウン フックは永久にブロックされます。これは、Thread.join()がすでに呼び出されているスレッドに対して呼び出された がSystem.exit()永久にブロックされるという連鎖反応です。
したがって、2つの質問があります。まず、Thread.join(long millis)無期限にブロックしないように代わりに使用できることはわかっていますが、よりエレガントなソリューションを考えられる人はいますか? 第二に、同じスレッドに対して2回呼び出すことができ、2回目はすぐに戻るだけですが、すでにブロックを無期限に呼び出してすぐに返さないスレッドに対してThread.join()呼び出す理由を知っている人はいますか?Thread.join()System.exit()
tomcat - webapp がまだ稼働している間に tomcat のシャットダウン通知を受け取る
ServletContextListener.contextDestroyed() が呼び出されるまでに、それぞれの Web アプリケーションは HttpRequests を受け入れなくなると思いますか?
はいの場合、リクエストを受け入れたりコンテンツを提供したりしながら、シャットダウンが差し迫っていることを通知する方法はありますか?
java - Linux 上の Java 6 - シャットダウン フックが SIGTERM または SIGINT シグナルによって開始されない
最近、Java ランタイム環境を古い Sun/Oracle Java 6 バージョン (1.6.0_18) から最新バージョンの 1.6.0_45 に更新しました。このアプリケーションは、-Xrs オプションなしで Java ランタイムで実行されます。Java ランタイム プロセスに SIGTERM または SIGINT シグナルが送信された場合、シャットダウン フックが実行されないことがわかりました。ただし、SIGHUP が送信されると、シャットダウン フックが開始されます。
この動作は、Linux での Oracle Java ランタイムの文書化された動作と矛盾しているようです。他の誰かがこの問題を見たことがありますか、または私たちが観察している動作を引き起こしている可能性のある Linux 環境の他の変更をチェックするためのアイデアを持っていますか?
scala - Neo4j - データベースのシャットダウン
Scala プロジェクトに組み込まれた Neo4j を使用しています。含めてきました
トランザクションの開始前に、すべての関数で上記のコードを実行します。すべての関数に含める必要がありますか。入れないとどうなるの?
java - javaはテスト用の非協調スレッドを作成します
私は、協力して正常に終了しない Java プロセスに数回噛まれました (制御できない低レベルのライブラリに埋もれてしまいます)。私は現在、事前に確立された時間でプロセスのハードストップを実装する一種のウォッチドッグをテストしていますScheduledStop. そのウォッチドッグは、スケジュールされた停止時間になるとプロセス全体を強制終了する独立したスレッドを実行するシングルトン クラスです。通常、すべてのスレッドはハードストップ時間の前に適切に戻り、プログラムは正常に終了します。ただし、必要に応じてプロセス自体を強制終了したり、ファイル ロックを解除したりします。これらはすべて Linux で実行されます。
私はそれが絶対確実ではないことを覚えているようですSystem.exit(0)(いくつかのシャットダウンフックがスタックしている場合、プロセスは生き続ける可能性があると思います)ので、次の行に沿って何かを作成しました:
ここで、実際には非協調的なスレッドをいくつか使用してテストしたいと思います。また、テストのために意図的にうまく機能していないシャットダウン フックを使用することもできます。
以下の最初の NastyThread はそれほど厄介ではありません... を無視しますInterruptionExceptionが、防止しませんSystem.exit(0)。exit()VM を終了しない状態にするにはどうすればよいですか?
もう 1 つの質問は、ウォッチドッグ スレッドは理論的には独立していますが、他のスレッドがそれを完全にプリエンプトし、スケジュールされた停止を失敗させる条件は何ですか?
必要に応じて、特定の時間に親 (Java プロセス) を強制終了する別のプロセス (単純な perl スクリプトなど) を起動できます。
java - Tomcat サーバーのシャットダウン時に org.apache.hadoop.util.ShutdownHookManager をロードできませんでした
Tomcat で簡単な Web アプリケーションを実行しています。この Web アプリケーションは、ファイルを HDFS に読み書きします。
私が直面している問題は、を使用してサーバーを停止するたびです./bin/shutdown.sh。Hadoop shutdownHookManager 例外を読み込めませんでした。
hadoop-common (ShutDownManager を含む) が tomcat クラスパスにあると確信しています。
誰でも私を助けることができますか?
私が得た例外: