【问题标题】:How can we stop a running java process through Windows cmd?我们如何通过 Windows cmd 停止正在运行的 java 进程?
【发布时间】:2011-02-08 06:58:23
【问题描述】:

我是 cmd 的新手,所以请允许我问一个愚蠢的问题:我们如何通过 Windows cmd 停止正在运行的 Java 进程?

例如,如果我们使用以下命令启动 Jetty(一个迷你 Web 服务器):

start javaw -jar start.jar

我们如何找到进程并在以后停止它?

显然下面的命令不起作用:

stop javaw -jar start.jar

【问题讨论】:

  • 你试过Ctrl + CCtrl + Break吗?
  • 是的,但是我可以构建一个 .bat 文件以使用 Ctrl + C 或 Ctrl + Break 停止它吗?
  • 也许检查 taskkill 命令。它有许多选择要杀死的进程的选项:通过进程 ID、名称模式、拥有用户等。但我建议首先寻找一种标准的、不那么暴力的方式来关闭特定的应用程序(服务器通常有某种“停止”命令)
  • 你知道进程名吗?如果这样做,您可以构建一个使用 taskkill 命令的 .bat 文件:microsoft.com/resources/documentation/windows/xp/all/proddocs/…(例如,taskkill /im notepad.exe)。
  • 嘿,伙计们,谢谢大家,但我不能在这里投票给你们或标记正确的答案。如果你们不介意,请回答。

标签: java windows batch-file cmd


【解决方案1】:

当我运行 taskkill 来停止 javaw.exe 进程时,它会说它已终止但仍在运行。 jqs 进程(java qucikstart)也需要停止。运行这个批处理文件解决了这个问题。

taskkill /f /im jqs.exe
taskkill /f /im javaw.exe
taskkill /f /im java.exe

【讨论】:

    【解决方案2】:

    我喜欢这个。

    wmic process where "name like '%java%'" delete
    

    您实际上可以用同样的方式杀死远程机器上的进程。

    wmic /node:computername /user:adminuser /password:password process where "name like '%java%'" delete
    

    wmic 太棒了!

    【讨论】:

    • 工作得很好,但我如何让它在批处理文件中工作?
    • @Xerus 语法应该是一样的。我能想到的唯一区别是,您可能需要将 where 子句中的百分号加倍:where "name like '%%java%%'" 以将文字百分号指定为 WQL 通配符,因此您的批处理脚本不会尝试将 %java% 扩展为批处理变量。
    • @Xerus 你可能应该发布一个新问题并在上下文中显示发生了什么。
    • 为我工作,谢谢!
    【解决方案3】:

    打开 windows cmd。 先列出所有java进程,

    jps -m
    

    现在获取名称并运行以下命令,

    for /f "tokens=1" %i in ('jps -m ^| find "Name_of_the_process"') do ( taskkill /F /PID %i )
    

    或者干脆杀死进程ID

    taskkill /F /PID <ProcessID>
    

    示例:)

    C:\Users\tk>jps -m
    15176 MessagingMain
    18072 SoapUI-5.4.0.exe
    15164 Jps -m
    3420 org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar -os win32 -ws win32 -arch x86_64 -showsplash -launcher C:\Users\tk\eclipse\jee-neon\eclipse\eclipse.exe -name Eclipse --launcher.library C:\Users\tk\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.401.v20161122-1740\eclipse_1617.dll -startup C:\Users\tk\eclipse\jee-neon\eclipse\\plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar --launcher.appendVmargs -exitdata 4b20_d0 -product org.eclipse.epp.package.jee.product -vm C:/Program Files/Java/jre1.8.0_131/bin/javaw.exe -vmargs -Dosgi.requiredJavaVersion=1.8 -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m -Declipse.p2.max.threads=10 -Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest -Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/ -jar C:\Users\tk\
    

    C:\Users\tk>for /f "tokens=1" %i in ('jps -m ^| find "MessagingMain"') do ( taskkill /F /PID %i )
    
    C:\Users\tk>(taskkill /F /PID 15176  )
    SUCCESS: The process with PID 15176 has been terminated.
    

    C:\Users\tk>taskkill /F /PID 15176 
    SUCCESS: The process with PID 15176 has been terminated.
    

    【讨论】:

      【解决方案4】:

      通常我不会打开那么多 Java 进程

      taskkill /im javaw.exe
      

      taskkill /im java.exe
      

      应该足够了。不过,这将杀死 所有 Java 实例。

      【讨论】:

        【解决方案5】:

        它相当混乱,但您需要执行以下操作:

        START "do something window" dir
        FOR /F "tokens=2" %I in ('TASKLIST /NH /FI "WINDOWTITLE eq do something window"' ) DO SET PID=%I
        ECHO %PID%
        TASKKILL /PID %PID%
        

        this page 上找到这个。 (存档)

        (如果你有 UNIX / LINUX 系统……或者如果你在 Windows 上运行 Cygwin 或类似的东西,这种事情会容易得多。)

        【讨论】:

        • PowerShell 也使这变得微不足道。
        • 如果你想杀死 所有 java.exe 进程:taskkill /F /IM java.exe /T。这么说,感谢FOR 循环我在其他地方重用了:)
        【解决方案6】:

        如果您不想杀死所有 java 进程,而是要杀死正在运行的特定 jar。它也适用于多个罐子。

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

        否则 taskkill /im java.exe 将杀死所有 java 进程

        【讨论】:

          【解决方案7】:

          建议taskkill /f /im java.exe 之类的答案可能会起作用,但是如果您想杀死 只杀死一个 java 进程 而不是全部,我可以建议在 window 的帮助下进行标题。示例:

          开始

          start "MyProgram" "C:/Program Files/Java/jre1.8.0_201/bin/java.exe" -jar MyProgram.jar

          停止

          taskkill /F /FI "WINDOWTITLE eq MyProgram" /T

          【讨论】:

            【解决方案8】:
            FOR /F "tokens=1,2 delims= " %%G IN ('jps -l') DO IF %%H==name.for.the.application.main.Class taskkill /F /PID %%G
            

            name.for.the.application.main.Class - 将此替换为您应用程序的主类(您可以在jps -l 输出的第二列中找到它)

            【讨论】:

              【解决方案9】:

              start javaw -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar

              start javaw -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar --stop

              【讨论】:

                【解决方案10】:

                您可以使用 PowerShell 做到这一点:

                $process = Start-Process "javaw" "-jar start.jar" -PassThru
                taskkill /pid $process.Id
                

                taskkill 命令将正常关闭应用程序。

                【讨论】:

                  【解决方案11】:

                  (在没有服务的 Windows 操作系统上)Spring Boot 启动/停止示例。

                  run.bat

                  @ECHO OFF
                  IF "%1"=="start" (
                      ECHO start your app name
                      start "yourappname" java -jar -Dspring.profiles.active=prod yourappname-0.0.1.jar
                  ) ELSE IF "%1"=="stop" (
                      ECHO stop your app name
                      TASKKILL /FI "WINDOWTITLE eq yourappname"
                  ) ELSE (
                      ECHO please, use "run.bat start" or "run.bat stop"
                  )
                  pause
                  

                  start.bat

                  @ECHO OFF
                  call run.bat start
                  

                  stop.bat:

                  @ECHO OFF
                  call run.bat stop
                  

                  【讨论】:

                  • 如果你使用javaw(后台进程)不起作用
                  【解决方案12】:

                  此命令可以从 Windows 命令提示符运行

                  杀死一个带有 PID 的 Java 进程

                  netstat -ano | findstr :java
                  taskkill /PID <ProcessID_From_Previous_Command> /F
                  

                  【讨论】:

                  • 在许多其他答案中已经提到了使用 taskkill,包括 Windows。
                  • @Eric Aya 你是绝对正确的,但我对大多数答案感到困惑,我想分享一些非常简单的命令。希望以上命令的结果能满足需求。
                  猜你喜欢
                  • 2016-02-15
                  • 2013-06-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-10-08
                  • 1970-01-01
                  • 2022-10-17
                  • 2016-02-25
                  相关资源
                  最近更新 更多