What's the best way to kill a process in Java ?
Get the PID and then killing it with Runtime.exec()
?
Use destroyForcibly()
?
What's the difference between these two methods, and is there any others solutions ?
Then you probably have a reference to it (ProcessBuilder.start()
or Runtime.exec()
both return a reference). In this case, you can simply call p.destroy()
. I think this is the cleanest way (but be careful: sub-processes started by p
may stay alive, check Process.destroy does not kill multiple child processes for more info).
The destroyForcibly
should only be used if destroy()
failed after a certain timeout. In a nutshell
destroy()
destroyForcibly()
if process is still aliveThen you don't have much choice: you need to pass through the OS API (Runtime.exec
). On Windows, the program to call will be taskkill.exe
, while on Mac and Linux you can try kill
.
Have a look at Support for Process.destroyForcibly() and .isAlive() from Java 8 and Killing a process using Java and Code a Simple Java App to Kill Any Process After a Specified Time for more info.