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 ?
If the process you want to kill has been started by your application
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 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4770092 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 aliveIf the process you want to kill is external
Then 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 https://github.com/zeroturnaround/zt-exec/issues/19 and Killing a process using Java and http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app-kill-any-process-after-specified-time-0133513/ for more info.