Class ShutdownHookProcessDestroyer

java.lang.Object
org.zeroturnaround.exec.listener.ShutdownHookProcessDestroyer
All Implemented Interfaces:
Runnable, ProcessDestroyer

public class ShutdownHookProcessDestroyer extends Object implements ProcessDestroyer, Runnable
Destroys all registered Processes when the VM exits.

This class is copied from Commons Exec.

  • Field Details

    • log

      private static final org.slf4j.Logger log
    • INSTANCE

      public static final ProcessDestroyer INSTANCE
      Singleton instance of the ShutdownHookProcessDestroyer.
    • processes

      private final Vector<Process> processes
      the list of currently running processes
    • destroyProcessThread

      The thread registered at the JVM to execute the shutdown handler
    • added

      private boolean added
      Whether or not this ProcessDestroyer has been registered as a shutdown hook
    • shutDownHookExecuted

      private volatile boolean shutDownHookExecuted
      Whether the shut down hook routine was already run
    • running

      private volatile boolean running
      Whether or not this ProcessDestroyer is currently running as shutdown hook
  • Constructor Details

    • ShutdownHookProcessDestroyer

      public ShutdownHookProcessDestroyer()
      Constructs a ProcessDestroyer and obtains Runtime.addShutdownHook() and Runtime.removeShutdownHook() through reflection. The ProcessDestroyer manages a list of processes to be destroyed when the VM exits. If a process is added when the list is empty, this ProcessDestroyer is registered as a shutdown hook. If removing a process results in an empty list, the ProcessDestroyer is removed as a shutdown hook.
  • Method Details

    • addShutdownHook

      private void addShutdownHook()
      Registers this ProcessDestroyer as a shutdown hook, uses reflection to ensure pre-JDK 1.3 compatibility.
    • removeShutdownHook

      private void removeShutdownHook()
      Removes this ProcessDestroyer as a shutdown hook, uses reflection to ensure pre-JDK 1.3 compatibility
    • isAddedAsShutdownHook

      public boolean isAddedAsShutdownHook()
      Returns whether or not the ProcessDestroyer is registered as as shutdown hook
      Returns:
      true if this is currently added as shutdown hook
    • add

      public boolean add(Process process)
      Returns true if the specified Process was successfully added to the list of processes to destroy upon VM exit.
      Specified by:
      add in interface ProcessDestroyer
      Parameters:
      process - the process to add
      Returns:
      true if the specified Process was successfully added
    • remove

      public boolean remove(Process process)
      Returns true if the specified Process was successfully removed from the list of processes to destroy upon VM exit.
      Specified by:
      remove in interface ProcessDestroyer
      Parameters:
      process - the process to remove
      Returns:
      true if the specified Process was successfully removed
    • size

      public int size()
      Returns the number of registered processes.
      Specified by:
      size in interface ProcessDestroyer
      Returns:
      the number of register process
    • run

      public void run()
      Invoked by the VM when it is exiting.
      Specified by:
      run in interface Runnable
    • destroy

      private void destroy(Process process)