如何以编程方式从另一个程序中关闭在Windows中运行的SPECIFIC Java应用程序?

时间:2010-12-10 14:26:00

标签: java windows

我需要(强制)从另一个程序中关闭特定的java应用程序。对于任何本机程序杀死它的进程或发送vm_close到它的主窗口通常可以工作,但不是在Windows上运行的Java应用程序。请注意,java应用程序仅显示托盘图标,并且在正常状态期间没有打开窗口。

3 个答案:

答案 0 :(得分:3)

如果您知道Java程序的PID,请使用:

Runtime.getRuntime().exec("taskkill /F /PID bla");

其中bla是您程序的PID。

/F参数将强制终止应用程序,我没有看到为什么Java程序与其他程序有任何不同并且能够存活的原因。

请注意,此代码显然是Windows特定的。如果您希望它是可移植的,您应首先使用

找出托管您的应用程序的操作系统
System.getProperty("os.name")

之后,如果您使用的话,请使用taskkill /F,如果您使用的是* nix系统,则使用kill -9,如果您使用的是更具异国情调的平台,请使用其他内容。

更新:为了全面了解所有正在运行的流程,我建议Process explorer。如果需要命令行进程列表器,请使用PsList

如果要杀死特定的Java程序,可能会有问题,因为默认情况下每个Java进程都被命名为java.exejavaw.exe

使用PsList,您可以以编程方式扫描以java开头的所有进程,然后结合jps,您将获得有关您真正想要杀死的内容的更多信息。

答案 1 :(得分:0)

一个简单的黑客是复制/粘贴第二个版本的java.exe(或javaw.exe),称之为java_alt.exe,然后使用Unix Tools for windows以新名称终止进程

答案 2 :(得分:0)

如果您将java应用程序的进程ID写入已知位置的临时文件,该怎么办?程序启动时,请执行以下操作:


//mark the instance file for delete
String instanceFileLocation = System.getProperty("java.io.tmpdir") + File.separator + "instances.dat";
File PIDFile = new File(instanceFileLocation).deleteOnExit();
//write the process id here

然后任何程序或应用程序都可以找到临时文件和特定进程ID。使用发布的其他解决方案来杀死它。

然后使用