【问题标题】:How can I programatically close a SPECIFIC java application running in windows from within another program?如何以编程方式从另一个程序中关闭在 windows 中运行的特定 java 应用程序?
【发布时间】:2010-12-10 14:25:59
【问题描述】:

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

【问题讨论】:

    标签: java windows


    【解决方案1】:

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

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

    bla 是您程序的 PID。

    /F 参数将强制终止应用程序,我看不出 Java 程序与其他程序有什么不同并且能够幸存下来的原因。

    请注意,此代码显然是特定于 Windows 的。如果您希望它是可移植的,您应该首先通过使用找出哪个操作系统托管您的应用程序

    System.getProperty("os.name")
    

    然后,如果您使用的是 Windows,请使用 taskkill /F,或者如果您使用的是 *nix 系统,请使用 kill -9,或者如果您使用的是更奇特的平台,请使用其他东西。

    更新:要对所有正在运行的进程有一个很好的了解,我推荐Process explorer。如果你想要一个命令行进程列表,使用PsList

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

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

    【讨论】:

    • 它不是我的应用程序,所以我不确定是否可以从中获取 PID,考虑到 javaw.exe 是程序运行时唯一运行的进程,它是否真的有一个。在多个 java 程序中可能有多个 javaw.exe,但我没有寻找。关于如何获取 PID 的任何建议?
    • 如果你运行 jps -lvm 你可以获得java程序的完整命令行。您需要了解要终止的进程。
    • 很棒的 jps 工具正是我所需要的,现在我从那里获得了 PID,它应该是小菜一碟!
    • @Kristian:我为您添加了更多方法,可以帮助您找到真正的 PID。
    • 我刚刚意识到JPS需要在执行此操作的计算机上安装JDK,而客户端计算机大多不是这种情况,还有其他方法吗?
    【解决方案2】:

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

    【讨论】:

    • 我需要杀死的 java 应用程序不是我的,我是在另一个程序中杀死它,那这还能用吗?
    • 如果您有“权限”来终止该进程并可以识别它。是否有可能让该进程使用交替命名的 java 可执行文件?
    【解决方案3】:

    如果您将 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。使用发布的其他解决方案杀死它。

    然后使用

    【讨论】:

    • 这不是我自己的应用程序,所以这不是一个选项
    猜你喜欢
    • 2013-03-25
    • 2016-04-25
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多