我需要(强制)从另一个程序中关闭特定的java应用程序。对于任何本机程序杀死它的进程或发送vm_close到它的主窗口通常可以工作,但不是在Windows上运行的Java应用程序。请注意,java应用程序仅显示托盘图标,并且在正常状态期间没有打开窗口。
答案 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.exe
或javaw.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。使用发布的其他解决方案来杀死它。
然后使用