2012-05-03 18 views
6

私はJava Runtime.exec()メソッドを使用して、batファイルを実行します。jarを実行するコードを書いています。このスレッドには、メッセージが見つかった場合にrabbitmqキューを無限にプールするスレッドクラスが含まれていますプロセスが無限に実行されることを意味します。私はこのプロセスをJavaコードを使用して終了したい、また私はこのメソッドがLinux OS上でスクリプトを実行できることを知りたい。Javaを使用して実行中のプロセスを閉じるにはどうすればよいですか?

**Used java code** 

String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat"; 
Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(myCMD); 

**used batch file** 

cd c: 
cd ElasticMgmtService\ 
java -jar ElasticIndexManagementService.jar config\ElasticIndexManagementService.xml 

問題を解決するのを手伝ってください。

+0

渡すことによって殺すことができます!プロセスを終了するには、http://stackoverflow.com/questions/6356340/killing-a-process-using-javaをご覧ください。 –

答えて

2

のRuntime.exec(...)でのWindows

Runtime rt = Runtime.getRuntime(); 
rt.exec("taskkill " +<Your process>); 

Process.destroy();

+0

私はdestroy()メソッドを試してみましたが、コマンドプロンプト(プロセス)を閉じません。文字列myCMD = "cmd.exe/C start c:\\ elasticmgmtservice.bat"; ランタイムrt = Runtime.getRuntime(); プロセスproc = rt.exec(myCMD); proc.destroy(); –

+0

@sam - 'cmd.exe/C start mspaint.exe'がdestroy()で正常に動作していることを確認しました。実際には、メソッドを破壊することに応答していないプロセスがあります。それはあなたが「タスクキル」または「殺す」の方が良いでしょう。 –

+0

@ Quoi-私はdestroyメソッドと 'taskkill'または 'kill'で次のコードを実行すると応答しません。プロセスリストから手動でkillしようとするとプロセスがkillされません。私はこのプロセスを手動で終了しました。正常に終了しました。何が起こったのか分かりませんでした。 –

0

Runtime.exec()は、execメソッドが作成したプロセスのハンドラであるProcessオブジェクトを返します。このプロセスを強制終了するには、Linuxの

Runtime rt = Runtime.getRuntime(); 
rt.exec("kill -9 " +<Your process>); 
2

を呼び出す必要がありますが、以下の方法で構成Processオブジェクトを返します

  • destroy()
  • exitValue()
  • getErrorStream()
  • のgetInputStream()
  • のgetOutputStream()
  • のwaitFor()

あなたはサブプロセスを殺す)(破壊する呼び出すことができます。このProcessオブジェクトによって表されるサブプロセスは、強制終了されます。 またはあなたは、Linux上でバッチファイルを実行して特定のバージョンを提供したり、Javaでバッチを書き換えることはできませんtaskkill /PID <process id>Runtime.exec(...)またはkill -9 <process id>

+0

これはひどい考えです。 Process#destroy()を使用するほうがはるかに望ましいです。 – dantiston

関連する問題