Linux は、 -Commandを使用して、SIGINT
またはなどの任意の Posix シグナルをプロセスに送信することをサポートしています。とは、友好的またはあまり友好的でない方法でプロセスを終了するための退屈な古い方法ですが、コアダンプをトリガーすることを目的としています。これを使用して、実行中の Java VM をトリガーして、実行中のすべてのスレッドのスタック トレースを含むスレッド ダンプを出力できます。デバッグ情報を出力した後、Java VM はそれまで行っていた処理を続行します。実際、スレッド ダンプは、最高優先度の別の生成されたスレッドで発生します。( を使用して、これを自分で試すことができます。)SIGTERM
kill
SIGINT
SIGTERM
SIGQUIT
kill -3 <VM-PID>
Signal
(サポートされていません!)および-packageSignalHandler
のクラスを使用して、独自のシグナル ハンドラーを登録することもsun.misc
できるので、さまざまな楽しみ方ができます。
ただし、Windows プロセスにシグナルを送信する方法をまだ見つけていません。シグナルは、特定のユーザー入力によって作成されます。たとえば、両方のプラットフォームでCtrl-C
a をトリガーします。SIGINT
しかし、Windows で実行中の非対話型プロセスにシグナルを手動で送信するユーティリティはないようです。明らかな解決策は、Cygwinkill
実行可能ファイルを使用することですが、適切な Windows API を使用して Windows プロセスを終了することはできますが、SIGBREAK
(Windows で に相当するSIGQUIT
) を一緒に送信することはできませんでした。実際、Windowsプロセスに送信できる唯一のシグナルはSIGTERM
.
長い話を短くして、見出しを繰り返します: Windows のプロセスに任意のシグナルを送信するにはどうすればよいですか?