3

antスクリプトからフォークされたJavaプロセスを開始し、Antプロセスを強制終了しても、Javaプロセスは強制終了されません。これは、IDEから実行する場合でも、コマンドラインから実行する場合でも同じです。

<target name="myTarget" >
  <java classname="path.to.MyClass" 
        fork="yes" 
        failonerror="true" 
        maxmemory="128M">
    <classpath refid="run" />
  </java>
</target>

これらをリンクして、antプロセスを強制終了するとjavaプロセスが強制終了されるようにする方法はありますか?

次のQ&Aを見てきましたが、これはJavaプロセスを手動で強制終了する方法に焦点を当てているようです。私は他の多くのJavaアプリケーションを実行していて、TaskManagerで強制終了する適切なjava.exeプロセスを見つけるのは必ずしも簡単ではないため、これを実行したくありません。

4

3 に答える 3

2

残念ながら、これは長年にわたる既知の問題のようです。

Ant タスクが終了すると、フォークされた Java プロセスのシャットダウン フックは起動されません。(これは Java 1.4 (!) 以降の問題のようです)

参考のため:

于 2013-11-29T10:07:19.857 に答える
1

「いいえ」に設定forkすると、同じ VM が使用されるため、ant プロセスを強制終了すると、この特定の Java プロセスも強制終了されます。

于 2012-06-11T09:52:02.707 に答える
0

プロセスを強制終了するためのクロスプラットフォーム ソリューションには、少し手間がかかります。子プロセスを強制終了する Java ツール/メソッド を参照してください。

Windows XP 以降では、次のバッチ スクリプトが役立つ場合があります。

for /f "skip=1 usebackq" %%h in (`wmic process where "Name like 'java%%.exe' and CommandLine like '%%path.to.MyClass%%'" get ProcessId ^| findstr .`) do taskkill /F /T /PID %%h

path.to.MyClassこのスクリプトは、組み込みの WMIC コマンドを使用して、コマンド ラインのどこかにある実行中の java*.exe プロセスのプロセス ID を見つけます。特定の Java プロセスに一致させるために WMIC をより具体的にする必要がある場合は、WMIC のヘルプ モードでリストされているプロパティを試してください。

wmic process get /?

taskkillルート プロセス ID (/PID) を指定して、プロセス ツリー (/T) を強制終了します。

于 2012-06-11T15:23:05.553 に答える