web-dev-qa-db-ja.com

Javaから外部プロセスにSIGINTシグナルを送信する方法は?

Javaアプリがあり、外部プロセスを作成し、InputStreamを介してプロセスの標準出力を読み取ります。プロセスが終了したらプロセスを強制終了できる必要があります。方法はありますか?このプロセスにSIGINTシグナルを送信しますか?(コンソールからCtrl + Cを押したかのように)。

外部プロセスは私のコードではなく、変更できません。

18
Jjreina

外部プログラムを_Java.lang.Process_として実行していますか? Processクラスにはdestroy()メソッドがあるため。

2
Ulf Jaehrig

送って頂けますか kill -SIGINT <pid>プロセスへ(プロセスIDを知っている場合):

Runtime.getRuntime().exec("kill -SIGINT 12345");

もちろん、それはプラットフォームに依存するソリューションになります...潜在的に、このツールは「サンドボックスモード」ですが、使用できるようになります。しかし、それはあなたにアイデアを与えるかもしれません:

http://commons.Apache.org/sandbox/runtime/

こちらの関連​​する質問もご覧ください。

Java with SIGKILL Process.destroy()does SIGTERM でLinuxプロセスを強制終了するにはどうすればよいですか?

15
Lukas Eder

現在のプロセス(別名JVM)にシグナルを送信したい場合、Googleからここに到着する他の人は、Sun.misc.Signal.raise()メソッドを使用できます。個人的には、使用しているJNIライブラリのために必要です。

3
Jason Axelson

残念ながら、Javaでarbirtrayシグナルを送信するネイティブな方法はありません。

Runtime.exec()の使用についてLukasに同意します。または、 Posix for Java ライブラリのようなものを使用することもできます。

2
D. Cannone