我有一个外部窗口.exe实际上是java应用程序:运行.exe启动javaw.exe,进而运行该Java应用程序。

我没有编写该应用程序,也无法通过API访问它。但是,我需要能够杀死它。因此,现在我只是杀死Windows Process Javaw.exe,这对于仅运行Java应用程序的测试机很好,但是如果我需要更细的粒度,我目前就不能这样做。

我的搜索提出了建议 Sysinternal的过程资源管理器 或JDK中的JPS命令,但是在我打算提供脚本的目标系统中,JDK和Sysinternal的Process Explorer都无法运行。

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

谢谢。

有帮助吗?

解决方案

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

我看不到缺点,因为这是您要杀死的过程。

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

其他提示

JDK(可能是JRE)带有一个名为JPS的实用程序,该船可以列出所有Java进程,但也告诉您当前在该JVM中运行的主要班级。如果不是JMX/JCONSOLE的选项,则简单地解析“ JPS -ML”的输出并杀死适当的过程。

如果您想杀死整个JVM,请杀死Javaw.exe过程。在JVM中可以有多个Java 线程 但是,除非应用程序的开发人员提供了这样做的方法,否则无法戳入JVM并终止线程。

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

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

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

只是另一种方法:如果您拥有JDK,则在BIN文件夹中有一个名为JVisualVM的程序。它具有有关每个运行JVM上下文的不错信息。您可以看到的一件事是VM的PID,我用它用于使用任务管理器在Windows中杀死该过程(默认情况下未显示Windows PID,但是您可以通过进入视图 - > Show轻松地启用该列列 )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top