5

Windows バッチ スクリプトの一部である Java Webstart プロセスがあります。この場合、バッチ スクリプトで javaws コマンドを使用しています。このマッチ スクリプト (start.bat) は、「apache commons exec」を使用してプログラムで呼び出されます。状況によっては、javaws によって呼び出された Java プロセスがハングし、バッチ スクリプト start.bat から始まるプロセス スレッド全体を強制終了する必要があります。apache commons execを介してプロセスツリー全体を強制終了するプログラム的な方法はありますか?

「execWatchdog.destroyProcess();」を使ってみました 「start.bat」スクリプトで。ただし、プロセス ツリー全体ではなく、start.bat プロセスのみを強制終了します。

apache-commons-exec または同様のコードを使用してプロセス ツリー全体を強制終了する方法はありますか?

私はこの質問を見てきました C++で同等のタスクを実行するWindows上のC++での「プロセスツリーの強制終了」と同等の実行. JNIを介してWindowsネイティブシステムコールの呼び出しを実装した人がいるかどうか疑問に思っています。

4

4 に答える 4

8

回り道ではありますが、ついに実行可能なものを手に入れました。

Apache Commons Exec API には、java.lang.Process オブジェクトを返す CommandLauncher クラスが含まれています。リンクのおかげで

ここでは、java.lang.Process から Windows プロセス ID を取得するためのリンクを示します。これは JNA ライブラリを使用します。

最後にプロセス ID を使用します。ここでは、プロセス ツリーを強制終了するコマンド文字列 //String killCmd = "taskkill /F /T /PID " + JNAHandler.getPid(process);

于 2011-10-02T16:30:58.800 に答える
2

残念ながら、お気づきのように、これを行う純粋な Java の方法はありません。ネイティブ コマンドまたは JNI ライブラリに頼る必要があります。これらはすべてプラットフォームに依存し、純粋な Java ソリューションよりも複雑です。

Java バグ データベース ( http://bugs.sun.com/view_bug.do?bug_id=4770092 ) で関連するバグに賛成票を投じる価値があるかもしれません。

運が良ければ、Java 8 でサブプロセスの処理が不十分であることを修正する価値があることを Java 開発者に納得させることができます。

于 2011-10-15T11:01:43.813 に答える
1

私の知る限り、commons-exec にはそのようなオプションはありません。開始したばかりのプロセスの PID を取得することさえできません。trapbash スクリプト内で kill シグナルを送信し、スクリプト プロセスが強制終了されたときにハンドラーにサブプロセスを強制終了させることができます。

于 2011-09-26T10:18:16.607 に答える