微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个Java应用程序中查找并杀死一个特定的Java进程

我有几个Java进程在Windows机器上运行。 我有一个Java进程应该监视其他进程,并定期终止或重新启动新进程。

如果我有一个运行com.foo.Main1的java进程和一个运行com.foo.Main2的java进程 – 我的监视进程如何查找并杀死Main2进程?

更新:我有一些代码可以执行一个命令行tasklist.exe并parsing它,但不pipe我做什么,我只看到java.exe进程,而不是执行哪个类

更新2:我没有能力安装非Java程序。

如何在RHEL中安装java jdk?

SOS – 柏林调度程序不能继续下一个工作

在Android API中有相当于Windows API的调用LOCKWINDOWUPDATE

Linux中的Java – 根和非根的不同外观和感觉类

创build具有该组的写入权限的目录

检测在Java中读取的文件

Apache PDFBox Java库 – 是否有创build表的API?

在Java应用程序中使用NTLM身份validation

使用Java中定义的读取权限读取对Windows上的文件的访问被拒绝

将Java线程ID与本地Linux PID匹配

使用特定于操作系统的工具并使用Runtime.exec()来运行它们可能会简单得多,但是我会尝试给出一个独立于平台的答案:

使用Attach API可以独立执行此平台。 这与JDK一起使用,所以要使用它,只需在程序的类路径中包含来自JDK的tools.jar 。

获取系统上的虚拟机列表,请使用VirtualMachine.list() 。 您可以从由此返回的虚拟机描述符对象中获取/分析参数。

attach API还允许您将代理加载到已经运行的Java进程中。 因为你想杀死一个Java进程,所以你可以编写一个简单的运行System.exit()的Java代理(或者如果你真的想使用它,请使用Runtime.halt()代替)。

一旦你确定了你想杀的那个, 附加它并加载杀手代理(代理必须被构建为一个JAR文件,可以被Java进程访问,它需要被加载)。 代理人附加后不久,该进程应该死亡。

这些链接也可能有助于:

附加API上的Oracle博客

打包java.lang.instrument的文档 (有关如何构建代理JAR的详细说明)

这是特定于Windows的。 我面临着同样的问题,我必须杀死使用taskkill特定的Java程序。 当我运行java程序时,tasklist显示的图像名称设置为java.exe。 但使用taskkill / F java.exe杀死它将停止除了预期不需要的其他Java应用程序以外的所有其他Java应用程序。

所以我运行相同的Java程序使用:

启动“MyProgramName”java java-program ..

这里start命令会打开一个新窗口,并运行窗口标题设置为MyProgramName的java程序。

现在用这个java程序使用下面的taskkill命令:

taskkill / fi“MyProgramName”

你的Java程序只会被杀死。 休息将不受影响。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐