問題タブ [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.

0 投票する
1 に答える
231 参照

java - シャットダウン フック メッセージが表示される前に GUI アプリケーションがシャットダウンする

ここでは Java の初心者です。これが取り引きです:私は次の単純なシャットダウンフックを持っています:

そして、メッセージがそこに表示されるように、出力がリダイレクトされる TextArea を備えた GUI アプリケーションを用意しました。そのウィンドウ リスナーも非常に単純です。

[X] ボタンで GUI アプリケーションを閉じると、全体がシャットダウンする前にメッセージが一瞬表示されます。ここには何も問題はありません。

私がやりたいことは、メッセージが印刷された後、メッセージが印刷されたことをはっきりと確認できるまで数秒待つことです。アプリケーションがまだすぐに閉じられるため、実行メソッドにスリープまたは待機などを追加しても機能しないようです。

シャットダウンフックは実際には適切に機能していると思いますが、アプリケーションが気にせずすぐに GUI を閉じるだけで、私のフックは Java limbo のどこかにメッセージを出力します。

あれは正しいですか?はいの場合、シャットダウンフックを非シャットダウンフックにせずに、シャットダウンフックが完了した後にのみGUIアプリケーションが閉じるようにする簡単な方法はありますか?

0 投票する
1 に答える
663 参照

java - Java シャットダウン フックと Excel シートへの書き込み

大まかに言えば、Excel スプレッドシートからデータを読み取り、それをハッシュ マップのリストに格納し、ドーム操作を行い、ステータスを取得し、その情報を Excel スプレッドシートに書き戻すプログラムがあります。現時点では、何らかの例外によってプログラムがクラッシュしたり、プログラムが正常に終了したりする場合は、すべて問題ありません。

現在、ユーザーが Ctrl + C を押して実行を終了した場合の処理​​を試みています。これを行う最善の方法は、独自のシャットダウン フックを実装することであると考えました。

Main() で、これをシャットダウンフックとして登録します

プログラムがシャットダウンフックに入ると、ファイルに書き込む部分に到達するまですべて問題なく、その後一連の例外をスローし始め、最後にスプレッドシートが破損します。

ここに私の書き込みコードがあります:

私が想定しているのは、書き込みが完了する前にExcelスプレッドシートを処理するオブジェクトが消去されているか、書き込み前にデータを保存するハッシュマップのリストが消去されていることです。

私の問題の可能な解決策としてスレッド結合を見てきましたが、それらを見ると、それらが私の問題の解決策であるとは思いません。

だから私の質問は、どうすればこれを私が望むように機能させることができるかということだと思います

乾杯、マイナート

編集:ここに例外があります

EDIT 2:まあ、私は自分の問題を理解しました。私はこれに間違った方法でアプローチしていました。私のコードは正しいですが、唯一の問題は、最終ブロックにファイル書き込みもあるということでした。したがって、私のプログラムが中断することなく最後まで実行されると、例外の原因である書き込みが 2 回実行されます。finally ブロックが実行されたかどうか、およびシャットダウン フックでの書き込みがスキップされたかどうかを確認することで、これを修正しました。

ついに:

シャットダウンフック

0 投票する
1 に答える
5689 参照

java - IntelliJ デバッガーでアプリのシャットダウン フックを実行できるようにするにはどうすればよいですか?

シャットダウン フックを登録するアプリを IntelliJ でデバッグする場合、緑の「再起動」円形矢印ボタンをクリックしても、赤い四角の「停止」ボタンをクリックしても、シャットダウン フックは呼び出されません。どちらの場合も、デバッグ中のアプリはすぐに強制終了されたようです。

(これはHow do I stop a processing running in intelliJ such that it calls the shutdown hooks?の複製ではないことに注意してください。 )

デバッガー プロセスに Mac ターミナルから INT シグナルを「手動で」送信すると、当然、シャットダウン フックが期待どおりに実行されます。しかし、IDE 内で目的の動作を引き起こす構成設定やコントロールを見つけることができませんでした。

0 投票する
1 に答える
941 参照

java - SIGTERM を JVM に送信しても安全ですか?

JVM はSIGTERM および同様のシグナルをシャットダウン フックに変換しますが、多くのサービス シャットダウン スクリプトは TCP ポートを使用してシャットダウンを開始します。(Tomcat のシャットダウン ポート、Java Service Wrapper、JBoss の管理インターフェースなど)

そのため、Play! フレームワークはシャットダウン フックを使用してサービス ライフサイクルを管理しており、によって生成された起動スクリプトplay distは、シグナルが JVM の PID に送信されることを前提としています。

シグナルはプラットフォームに依存し、TCP ポートを使用することはクロスプラットフォームの方法でサービスを管理するためのシンプルで拡張可能な方法であることを知っていますが、それがどれほど安全であり、依存するときにどのようなリスクを考慮する必要があるかを知りたいです。サービスをシャットダウンするための主要な方法として、SIGTERM およびシャットダウン フックを使用します。

0 投票する
1 に答える
880 参照

guava - EventBus google guava シャットダウン フック

現在、アプリケーションでグアバ EventBus アプローチを使用しています。リスナーは何らかの処理を試みますが、失敗した場合は、イベントをバスに戻して再送信する必要があります。
私の質問は次のとおりです。アプリケーションがダウンしている場合 (シャットダウンを実行している場合) はどうなりますか? バス内の残りのイベントを送信しますか?

ActiveMQ シャットダウン方法で実装されるなど、いくつかのアプローチを探しています

ブローカはシャットダウン フックをインストールして、JVM の強制終了時に自身を適切にシャットダウンできるようにする必要があります。

残念ながら、EventBus guava で同様のものは見つかりませんでした。

0 投票する
3 に答える
1439 参照

java - Java 同時実行: 終了するまで実行

私は現在、次のようなコードのチャンクをリファクタリングしています。

アイデアは、コードの実行に a を使用したいということScheduledExecutorServiceです:

ただし、これにはいくつかの懸念があります。まず、main()スケジューリング後にプログラムが「終了」する (リターンのように) という事実ですが、JVM はScheduledExecutorService実行されたままであるため、存続します。これは、「外部から終了されるまで実行し続ける」という古いコードの動作を維持するための意図的なものだと思いますが、ScheduledExecutorService適切にシャットダウンするためにシャットダウン フックをインストールする必要があると思います。それは実際に当てはまりますか、それとも「外部から殺される」ことでシャットダウンフックの実行も妨げられますか?

第二に、私はそもそもシャットダウンフックを持つことについてもきしむ。次のようなコードがあった場合

上記と同じ「外部から殺される」懸念はまだ存在しますか?

編集: はい、元のプログラムはループを突破することなくループします。たとえば、SIGINT(端末のcontrol-C)から終了することのみを目的としていました。かなり曖昧な終了条件ですが、今はそれしかありません...

0 投票する
2 に答える
248 参照

java - OSが開始したシャットダウン中にJavaスレッドが停止しました(JAVAドキュメントと矛盾しています!)

java.lang.Thread.setDaemon(boolean)

実行中のスレッドがすべてデーモン スレッドのみの場合、Java 仮想マシンは終了します。

まだ下のコードでは、プロセスを中断している間(OSスタイル)に「安全にシャットダウン」が発生することはなく、SIGKILLを使用していません...

ドキュメンテーションが間違っているので (?)、すべての非デーモン スレッドを追跡し、シャットダウン フックでそれらに参加する唯一の手段ですか?

0 投票する
1 に答える
490 参照

java - Raspberry Pi Java シャットダウン フック

Java 1.8.0 を実行する Raspberry Pi と test.jar というファイルがあります。コードを実行して Ctrl+Z でプログラムを停止すると、シャットダウン フックは実行されませんが、Windows でコードを実行して停止すると、シャットダウン フックが機能します。

どうすればこれを修正できますか、ありがとう