【问题标题】:How to find the process id of a running Java process on Windows? And how to kill the process alone?如何在 Windows 上找到正在运行的 Java 进程的进程 ID?以及如何单独杀死进程?
【发布时间】:2012-10-13 02:48:18
【问题描述】:

我想杀死 Windows 中的特定 Java 进程,就像在 Linux 中一样(ps -aux 获取 processid,然后 kill processid 杀死进程)。

【问题讨论】:

标签: java windows process-management


【解决方案1】:

您可以使用jps 实用程序included in the JDK 来查找Java 进程的进程ID。输出将显示可执行 JAR 文件的名称或主类的名称。

然后使用 Windows 任务管理器终止该进程。如果您想在命令行上执行此操作,请使用

TASKKILL /PID %PID%

【讨论】:

  • jps 工具现在包含在 JDK/bin 目录中。我还建议使用-l 选项,它会输出应用程序主类的完整包名,这可能会有所帮助。
  • jps 不是 Windows 上 JRE 1.8 的一部分。
  • 并且不允许在捆绑的 JDK 之外重新分发 jps.exe - 如果你像我一样有这个奇特的想法:( - 因此下面的 WMIC 解决方案对我来说是真正的赢家
【解决方案2】:

您还可以使用任务管理器查找 java 程序的 PID。您启用 PID命令行View -> Select Columns,然后就可以找到正确的进程。

您的结果将是这样的:

【讨论】:

  • 您的 Windows 任务管理器窗口是德语,但您的它显示完整答案:我们可能会在列表中找到 java 进程,然后我们有它的 PID 号和Command line(在图片上 Befehlszeile)我们看到完整的命令,这有助于我们区分要杀死哪个java进程。
  • 要编辑列列表,只需右键单击任何列标题(在详细信息选项卡中)并选择Select column 选项。
【解决方案3】:

设置你的jdk的路径后使用JPS。然后你可以通过任务管理器轻松杀死它
JPS会给你所有java进程

【讨论】:

【解决方案4】:

即使有多个 jar 实例正在运行,这也会起作用

wmic Path win32_process Where "CommandLine Like '%yourname.jar%'" Call Terminate

【讨论】:

    【解决方案5】:

    我找到的解决方案非常简单。使用 Window 的 WMIC 和 Java 的 Runtime 来定位并终止进程。

    第 1 部分:您需要在应用的启动命令行中添加某种标识符。例如。类似:

    String id = "com.domain.app";
    

    第 2 部分:运行应用时,请确保包含字符串。假设您从 Java 中启动它,请执行以下操作:

    Runtime.getRuntime().exec(
       "C:\...\javaw.exe -cp ... -Dwhatever=" + id + " com.domain.app.Main"
    );
    

    第 3 部分:要终止进程,请使用 Window 的 WMIC。只需确保您的应用启动时包含您的 ID:

    Runtime.getRuntime().exec(
      "wmic process Where \"CommandLine Like '%" + id + "%'\" Call Terminate"
    );
    

    【讨论】:

      【解决方案6】:

      在 Windows XP 及更高版本中,有一个命令:tasklist 列出所有进程 ID。

      要在 Windows 中杀死进程,请参阅:

      Really killing a process in Windows | Stack Overflow

      您可以通过以下方式在 Java 中执行操作系统命令:

      Runtime.getRuntime().exec("your command here");
      

      如果您需要处理命令的输出,请参见示例:using Runtime.exec() in Java

      【讨论】:

        【解决方案7】:

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

        所以我使用以下方式运行相同的 java 程序:

        start "MyProgramName" java java-program..
        

        此处的启动命令将打开一个新窗口并运行 java 程序,窗口的标题设置为 MyProgramName。

        现在要杀死这个 java 程序,使用以下 taskkill 命令:

        taskkill /fi "MyProgramName"
        

        您的 Java 程序只会被终止。休息不受影响。

        【讨论】:

        • taskkill 不起作用:错误:无法识别搜索过滤器(关于它)。但是感谢start "MyProgramName"
        • taskkill /fi "WINDOWTITLE eq MyProgramName" 工作正常。
        【解决方案8】:
        1. 打开 Git Bash
        2. 输入ps -ef | grep java
        3. 找到运行jdk的pid
        4. kill -9 [pid]

        【讨论】:

          【解决方案9】:

          在windows中,我们可以使用PowerShell来列出java运行的进程。然后使用进程ID我们可以终止进程。请找到以下需要在 PowerShell 中执行的命令。

          列出 Java 进程。

          ps | Where-Object -Property ProcessName -EQ -Value 'Java'
          

          杀死指定id的java进程。

          Stop-Process <PID>
          

          上述方法对我有用。

          【讨论】:

            猜你喜欢
            • 2018-10-28
            • 2012-07-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-27
            • 2017-09-22
            • 1970-01-01
            • 2015-11-02
            相关资源
            最近更新 更多