Questions tagged [shutdown-hook]

A shutdown hook is simply an initialized but unstarted thread. When the virtual machine begins its shutdown sequence it will start all registered shutdown hooks in some unspecified order and let them run concurrently.

public void addShutdownHook(Thread hook)

Registers a new virtual-machine shutdown hook.

The Java virtual machine shuts down in response to two kinds of events:

The program exits normally, when the last non-daemon thread exits or when the exit (equivalently, System.exit) method is invoked, or The virtual machine is terminated in response to a user interrupt, such as typing ^C, or a system-wide event, such as user logoff or system shutdown. A shutdown hook is simply an initialized but unstarted thread. When the virtual machine begins its shutdown sequence it will start all registered shutdown hooks in some unspecified order and let them run concurrently. When all the hooks have finished it will then run all uninvoked finalizers if finalization-on-exit has been enabled. Finally, the virtual machine will halt. Note that daemon threads will continue to run during the shutdown sequence, as will non-daemon threads if shutdown was initiated by invoking the exit method.

Once the shutdown sequence has begun it can be stopped only by invoking the halt method, which forcibly terminates the virtual machine.

Once the shutdown sequence has begun it is impossible to register a new shutdown hook or de-register a previously-registered hook. Attempting either of these operations will cause an IllegalStateException to be thrown.

Shutdown hooks run at a delicate time in the life cycle of a virtual machine and should therefore be coded defensively. They should, in particular, be written to be thread-safe and to avoid deadlocks insofar as possible. They should also not rely blindly upon services that may have registered their own shutdown hooks and therefore may themselves in the process of shutting down. Attempts to use other thread-based services such as the AWT event-dispatch thread, for example, may lead to deadlocks.

Shutdown hooks should also finish their work quickly. When a program invokes exit the expectation is that the virtual machine will promptly shut down and exit. When the virtual machine is terminated due to user logoff or system shutdown the underlying operating system may only allow a fixed amount of time in which to shut down and exit. It is therefore inadvisable to attempt any user interaction or to perform a long-running computation in a shutdown hook.

Uncaught exceptions are handled in shutdown hooks just as in any other thread, by invoking the uncaughtException method of the thread's ThreadGroup object. The default implementation of this method prints the exception's stack trace to System.err and terminates the thread; it does not cause the virtual machine to exit or halt.

In rare circumstances the virtual machine may abort, that is, stop running without shutting down cleanly. This occurs when the virtual machine is terminated externally, for example with the SIGKILL signal on Unix or the TerminateProcess call on Microsoft Windows. The virtual machine may also abort if a native method goes awry by, for example, corrupting internal data structures or attempting to access nonexistent memory. If the virtual machine aborts then no guarantee can be made about whether or not any shutdown hooks will be run.

220 questions
1
vote
1 answer

Unregister sys.ShutdownHookThread if thread is successful?

I have a Future in Scala 2.11 that is controlled by a worker actor in Akka. The Future is executed by the worker and the worker reports back to a central actor to report success/failure and requests more work. The futures handled by the worker are…
crockpotveggies
  • 12,682
  • 12
  • 70
  • 140
1
vote
0 answers

Delay windows shutdown with Java?

Is there a way to delay a windows shutdown with Java? I always have the problem, that the system is killing the JVM before my ShutdownHook ran through completely. Annotation: I have to perform action on a remote server when the system shuts down.…
jntme
  • 602
  • 1
  • 5
  • 18
1
vote
1 answer

Why does my restarted Java program lose keyboard focus?

I attempted to create a simplified failsafe Java application that would restart itself, whenever it was forcibly shutdown (in Windows, using CMD command of CTRL+C ). The batch code looks like this : @echo off setlocal start /wait java…
Caffeinated
  • 11,982
  • 40
  • 122
  • 216
1
vote
2 answers

Collection not being iterated in a java shutdown hook

I have been struggling for a few hours already on that nonsensical problem, so now I'm seeking for help. 1 liner: my shutdown hook is apparently terminated before it finishes its duty. The code I'm running looks like this: class Test { static…
fabien
  • 1,529
  • 1
  • 15
  • 28
1
vote
0 answers

ShutdownHook is not called on 'kill -TERM '

I have this sample application from here public class ExampleSignalHandler { public static void main(String... args) throws InterruptedException { final long start = System.nanoTime(); Runtime.getRuntime().addShutdownHook(new Thread(new…
user2071938
  • 2,055
  • 6
  • 28
  • 60
1
vote
0 answers

Is there a way to fix the bug in my code, which uses a shutDownHook to simulate fail-safe behavior?

In my Java code, it simply loops some output and then continues to loop it even if we send CTRL+C via windows command-line. But issue is that it only works once. After the first iteration of CTRL+C it looks like we lose the access to the JVM from…
Caffeinated
  • 11,982
  • 40
  • 122
  • 216
1
vote
0 answers

Jenkins shut down hook if build is interrupted

I have a Jenkins job and the integration tests require certain resources. I have a shut down hook that ensures that all connections have been closed and worker threads stopped in case there is such a situation that some of them are missed during…
aiguy
  • 671
  • 5
  • 20
1
vote
1 answer

What parts of my application can I access and use during a shutdown hook execution?

I am trying to understand when a shutdown hook executes. Is it before or after any part of my application has been stopped? Since my shutdown hook code will be running in a freshly created thread, can I access other non-shutdown-hook threads from…
1
vote
3 answers

Java Concurrency: Run until terminated

I'm currently refactoring a chunk of code that pretty much goes like this: public static void main(String... args) { while (true) { // Do something... Thread.sleep(300000); // Every 5 minutes } } The idea is that I want to…
1
vote
0 answers

Passing values to ShutdownHook or accessing values of other objects from ShutdownHook

What am trying to figure out is, how to display the values of the datamembers from other class objects, when the program terminates. I mean, using the ShutdownHook, which will be accessed when pressing the Ctrl+C to terminate the program. The…
Vpp Man
  • 2,384
  • 8
  • 43
  • 74
1
vote
3 answers

How to invoke shutdown hooks of a program running in another thread

I am writing automated tests for a Swing application using Jemmy framework. My test suite run this application by invoking the main method of its Main class in a new thread. I have already written a lot of GUI-related tests but now I have got a more…
livthomas
  • 1,160
  • 1
  • 14
  • 25
1
vote
0 answers

Is this a JVM or GNOME 3 bug?

I think i've found a bug on either the jvm or gnome 3. Shutdownhooks are never run on gnome 3 if the application had the EDT activated on shutdown or logout - never never - while they always run/start if the application never used swing/AWT. If you…
i30817
  • 1,356
  • 2
  • 13
  • 26
1
vote
2 answers

Scala add shutdown hook to Scala swing

I have used shutdown hooks before in java apps however not in java swing. I want to add a shutdown hook to scala swing app. Scala swing has no main method so i have no idea how to implement it I want to run a few methods just before closing so if…
user1086167
1
vote
2 answers

Java shutdown hook across different JVM

Can i attach java shutdown hook across jvm . I mean can I attach shut down from my JVM to weblogic server running in different jvm?
chiru
  • 812
  • 5
  • 17
  • 32
1
vote
1 answer

Programmatically access exit status from shutdown hook

Wondering how to programmatically access the exit status in System.exit from a shutdown hook? Different types of shutdowns need to lead to different logics in my application (how "hard" to shutdown), there's a few ways I'm thinking of doing this…
djechlin
  • 59,258
  • 35
  • 162
  • 290