45

I am a newbie in cmd, so please allow me to ask a stupid question: How can we stop a running Java process through Windows cmd?

For example, if we start Jetty (a mini web server) with the following command:

start javaw -jar start.jar

How do we find the process and stop it later?

Obviously the following command does not work:

stop javaw -jar start.jar
Ross Ridge
  • 38,414
  • 7
  • 81
  • 112
Winston Chen
  • 6,799
  • 12
  • 52
  • 81
  • 4
    Did you try `Ctrl + C` or `Ctrl + Break`? – Frank Bollack Apr 15 '10 at 09:00
  • yes, but can I build a .bat file to stop it with Ctrl + C or Ctrl + Break? – Winston Chen Apr 15 '10 at 09:05
  • 2
    Maybe check the taskkill command. It has many options for choosing the process to kill: by process id, by name pattern, by owning user, etc. But I recommend first looking for a standard, less violent way of closing the specific application (servers usually have some kind of "stop" command) – Eyal Schneider Apr 15 '10 at 09:10
  • 1
    Do you know the process name? If you do, you can build a .bat file that uses the taskkill command: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/taskkill.mspx?mfr=true (for example, `taskkill /im notepad.exe`). – IVlad Apr 15 '10 at 09:10
  • hey, guys, thank you all but I cannot vote you guys up or mark correct answer here. If you guys don't mind, please answer it. – Winston Chen Apr 15 '10 at 09:20

11 Answers11

66

When I ran taskkill to stop the javaw.exe process it would say it had terminated but remained running. The jqs process (java qucikstart) needs to be stopped also. Running this batch file took care of the issue.

taskkill /f /im jqs.exe
taskkill /f /im javaw.exe
taskkill /f /im java.exe
Tup
  • 661
  • 1
  • 5
  • 2
  • You may be better off actually looking at started services - sometimes new java processes spawn again in some sort of failover - so you'd be killing processes forever! – JGFMK Jul 26 '23 at 16:18
32

I like this one.

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

You can actually kill a process on a remote machine the same way.

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

wmic is awesome!

rojo
  • 24,000
  • 5
  • 55
  • 101
  • works nicely, but how do I get it working in a batch file? – xeruf Dec 14 '17 at 22:03
  • @Xerus The syntax should be the same. The only difference I can think of is, you might need to double the percent signs in the `where` clause: `where "name like '%%java%%'"` to specify literal percent signs as WQL wildcards, so your batch script won't try to expand `%java%` as a batch variable. – rojo Dec 15 '17 at 04:45
  • @Xerus You probably ought to post a new question and show what's going on in context. – rojo Dec 15 '17 at 19:57
  • Worked for me, Thanks! – Amor Jul 08 '21 at 21:32
22

Open the windows cmd. First list all the java processes,

jps -m

now get the name and run below command,

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

or simply kill the process ID

taskkill /F /PID <ProcessID>

sample :)

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\

and

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.

or

C:\Users\tk>taskkill /F /PID 15176 
SUCCESS: The process with PID 15176 has been terminated.
tk_
  • 16,415
  • 8
  • 80
  • 90
17

Normally I don't have that many Java processes open so

taskkill /im javaw.exe

or

taskkill /im java.exe

should suffice. This will kill all instances of Java, though.

Joey
  • 344,408
  • 85
  • 689
  • 683
13

It is rather messy but you need to do something like the following:

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%

Found this on this page. (archived)

(This kind of thing is much easier if you have a UNIX / LINUX system ... or if you run Cygwin or similar on Windows.)

drac_o
  • 427
  • 5
  • 11
Stephen C
  • 698,415
  • 94
  • 811
  • 1,216
  • PowerShell also makes this trivial. – Joey Apr 18 '10 at 08:39
  • 6
    If you want to kill *all* java.exe processes : `taskkill /F /IM java.exe /T`. Thus said, thanks for the `FOR` loop I reused elsewhere :) – Benj Aug 19 '15 at 09:14
8

In case you want to kill not all java processes but specif jars running. It will work for multiple jars as well.

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

Else taskkill /im java.exe will work to kill all java processes

Vinaykumar Patel
  • 864
  • 11
  • 26
5

The answer which suggests something like taskkill /f /im java.exe will probably work, but if you want to kill only one java process instead of all, I can suggest doing it with the help of window titles. Expample:

Start

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

Stop

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

FloPinguin
  • 351
  • 1
  • 5
  • 16
1
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 - replace this to your application's main class (you can find it in second column of jps -l output)

Nikolai Novik
  • 87
  • 2
  • 8
vneste
  • 19
  • 1
0

You can do this with PowerShell:

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

The taskkill command will graceful close the application.

Rosberg Linhares
  • 3,537
  • 1
  • 32
  • 35
0

(on Windows OS without Service) Spring Boot start/stop sample.

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
Stéphane GRILLON
  • 11,140
  • 10
  • 85
  • 154
-1

This command can run from Windows Command Prompt

Kill a Java Process with PID

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

sarath
  • 767
  • 12
  • 19
  • Using taskkill has already been mentioned in many other answers, including for Windows. – Eric Aya Jul 19 '21 at 10:59
  • @Eric Aya You are absolutely right but I was confused with most of the answers and I thought to share some very simple commands. I hope the outcome of the above command will satisfy the need. – sarath Jul 19 '21 at 11:15