如何在Windows中杀死Java进程而不杀死javaw.exe?

时间:2010-09-12 18:46:20

标签: process kill java javaw

我有一个外部Windows .exe实际上是Java应用程序:运行.exe启动javaw.exe,后者又运行该Java应用程序。

我没有编写该应用程序,也无法通过API访问它。但是,我需要能够杀死它。所以现在我只是杀死Windows进程javaw.exe,这对于只运行该Java应用程序的测试机器来说很好,但是如果我需要更精细的粒度,我目前还不能这样做。

我的搜索在JDK中产生了诸如Sysinternal's Process Explorer或jps命令的建议,但在我打算提供脚本的目标系统中,JDK和Sysinternal的Process Explorer都无法运行。

还有其他方法不需要外部工具吗? javaw.exe是否有一个列出Java进程的开关或命令行选项?是否有JRE版本的jps?

感谢。

6 个答案:

答案 0 :(得分:3)

我仍然建议只杀死javaw.exe。

我看不出缺点,因为这毕竟是你要杀的过程。

请记住,如果您在计算机上运行多个应用程序,则每个应用程序都应具有单独的JVM实例。因此,如果需要,您仍然可以杀死特定的应用程序。

答案 1 :(得分:3)

JDK(可能还有JRE)附带一个名为jps的实用程序,它可以列出所有Java进程,但也会告诉您当前在该JVM中运行的Main-Class。如果JMX / JConsole不是一个选项,只需解析“jps -ml”的输出并杀死相应的进程就可以了。

答案 2 :(得分:2)

如果要杀死整个JVM,只需终止javaw.exe进程即可。在JVM中可以有多个Java 线程 ,但除非应用程序的开发人员提供了一个方法,否则无法进入JVM并终止线程。< / p>

答案 3 :(得分:1)

根据您的评论,多个javaw.exe程序正在运行,您需要知道要杀死哪个程序。

您可能希望尝试使用JConsole连接到每个进程并检查JVM。可能有足够的线索来确定要杀死哪一个。一旦确定了应用程序的配置文件,您就应该能够编写逻辑脚本以便将来更容易(使用JMX获取JConsole提供的大部分信息)。

答案 4 :(得分:0)

如果可执行文件启动javaw然后退出而不提供任何进一步的信息,则在启动可执行文件之后和可执行文件完成之后,您似乎需要使用脚本语言来获取计算机上正在运行的进程的快照。然后,您将能够推断出哪个是新的javaw进程。您使用的是哪种脚本语言?

答案 5 :(得分:0)

另一种方法:如果你有jdk,bin文件夹中有一个名为jvisualVM的程序。它有关于每个正在运行的JVM上下文的信息。您可以看到的一件事是VM的PID,我用它来使用任务管理器终止Windows中的进程(默认情况下不显示Windows PID,但您可以通过进入视图轻松启用列 - &gt;显示列)