How do I stop a Java process gracefully in Linux and Windows?
Shutdown hooks execute in all cases where the VM is not forcibly killed. So, if you were to issue a "standard" kill (
SIGTERM from a kill command) then they will execute. Similarly, they will execute after calling
However a hard kill (
kill -9 or
kill -SIGKILL) then they won't execute. Similarly (and obviously) they won't execute if you pull the power from the computer, drop it into a vat of boiling lava, or beat the CPU into pieces with a sledgehammer. You probably already knew that, though.
Finalizers really should run as well, but it's best not to rely on that for shutdown cleanup, but rather rely on your shutdown hooks to stop things cleanly. And, as always, be careful with deadlocks (I've seen far too many shutdown hooks hang the entire process)!