5

実際にはJavaアプリケーションである外部Windows.exeがあります。.exeを実行するとjavaw.exeが起動し、次にそのJavaアプリケーションが実行されます。

私はそのアプリケーションを作成しておらず、APIを介してそのアプリケーションにアクセスすることはできません。しかし、私はそれを殺すことができる必要があります。そのため、今はWindowsプロセスjavaw.exeを強制終了します。これは、そのJavaアプリケーションのみを実行するテストマシンには問題ありませんが、より細かい粒度が必要な場合は、現時点では実行できません。

私の検索では、SysinternalのProcess ExplorerやJDKのjpsコマンドなどの提案がありましたが、スクリプトを提供する予定のターゲットシステムでは、JDKもSysinternalのProcessExplorerも実行できません。

外部ツールを必要としない他の方法はありますか?javaw.exeには、Javaプロセスを一覧表示するスイッチまたはコマンドラインオプションがありますか?jpsのJREバージョンはありますか?

ありがとう。

4

6 に答える 6

3

それでも、javaw.exeを強制終了することをお勧めします。

結局、殺したいプロセスなので、マイナス面はわかりません。

マシン上で複数のアプリケーションを実行する場合は、それぞれに個別のJVMインスタンスが必要であることに注意してください。したがって、必要に応じて特定のアプリケーションを強制終了できます。

于 2010-09-12T19:01:14.063 に答える
3

JDK(および場合によってはJRE)には、すべてのJavaプロセスを一覧表示できるだけでなく、そのJVMで現在実行されているメインクラスも通知できるjpsというユーティリティが付属しています。JMX / JConsoleがオプションでない場合は、「jps -ml」の出力を解析して、適切なプロセスを強制終了するだけで機能する場合があります。

于 2010-09-13T11:23:17.597 に答える
2

JVM全体を強制終了する場合は、javaw.exeプロセスを強制終了します。JVM内には複数のJavaスレッドが存在する可能性がありますが、アプリケーションの開発者がそうする方法を提供しない限り、JVMに突入してスレッドを終了する方法はありません。

于 2010-09-12T19:05:12.290 に答える
1

あなたのコメントに基づいて、複数のjavaw.exeプログラムが実行されており、どれを強制終了するかを知る必要があります。

JConsoleを使用して各プロセスに接続し、JVMを検査することをお勧めします。どれを殺すかを決めるのに十分な手がかりがあるかもしれません。アプリケーションのプロファイルを特定したら、ロジックをスクリプト化して、将来的に簡単にすることができるはずです(JMXを使用して、JConsoleによって提供されるほとんどの情報を取得します)。

于 2010-09-13T11:14:24.920 に答える
0

実行可能ファイルがjavawを起動し、それ以上の情報を提供せずに終了した場合、実行可能ファイルを起動する前と実行可能ファイルが終了した後、スクリプト言語を使用してマシンで実行中のプロセスのスナップショットを取得する必要があるようです。次に、どちらが新しいjavawプロセスであるかを推測できます。どのスクリプト言語を使用していますか?

于 2010-09-13T11:34:01.727 に答える
0

別のアプローチ:jdkがある場合は、binフォルダーにjvisualVMというプログラムがあります。実行中の各JVMコンテキストに関する優れた情報があります。表示されるものの1つはVMのPIDです。これは、タスクマネージャーを使用してWindowsでプロセスを強制終了するために使用します(WindowsではPIDはデフォルトでは表示されませんが、表示->表示に移動することで列を簡単に有効にできます列)

于 2012-03-12T08:11:41.247 に答える