Package hudson.util

Class ProcessTree

All Implemented Interfaces:
ProcessTreeRemoting.IProcessTree, Serializable, Iterable<ProcessTree.OSProcess>, org.jenkinsci.remoting.SerializableOnlyOverRemoting
Direct Known Subclasses:
ProcessTree.Local, ProcessTree.Remote

public abstract class ProcessTree extends Object implements Iterable<ProcessTree.OSProcess>, ProcessTreeRemoting.IProcessTree, org.jenkinsci.remoting.SerializableOnlyOverRemoting
Represents a snapshot of the process tree of the current system.

A ProcessTree is really conceptually a map from process ID to a ProcessTree.OSProcess object. When Hudson runs on platforms that support process introspection, this allows you to introspect and do some useful things on processes. On other platforms, the implementation falls back to "do nothing" behavior.

ProcessTree is remotable.

Kohsuke Kawaguchi
See Also:
  • Field Details

  • Method Details

    • get

      @CheckForNull public final ProcessTree.OSProcess get(int pid)
      Gets the process given a specific ID, or null if no such process exists.
    • iterator

      @NonNull public final Iterator<ProcessTree.OSProcess> iterator()
      Lists all the processes in the system.
      Specified by:
      iterator in interface Iterable<ProcessTree.OSProcess>
    • get

      @CheckForNull public abstract ProcessTree.OSProcess get(@NonNull Process proc)
      Try to convert Process into this process object or null if it fails (for example, maybe the snapshot is taken after this process has already finished.)
    • killAll

      public abstract void killAll(@NonNull Map<String,String> modelEnvVars) throws InterruptedException
      Kills all the processes that have matching environment variables.

      In this method, the method is given a "model environment variables", which is a list of environment variables and their values that are characteristic to the launched process. The implementation is expected to find processes in the system that inherit these environment variables, and kill them all. This is suitable for locating daemon processes that cannot be tracked by the regular ancestor/descendant relationship.

      Specified by:
      killAll in interface ProcessTreeRemoting.IProcessTree
    • killAll

      public void killAll(@CheckForNull Process proc, @CheckForNull Map<String,String> modelEnvVars) throws InterruptedException
      Convenience method that does killAll(Map) and ProcessTree.OSProcess.killRecursively(). This is necessary to reliably kill the process and its descendants, as some OS may not implement killAll(Map). Either of the parameter can be null.
    • get

      public static ProcessTree get()
      Gets the ProcessTree of the current system that JVM runs in, or in the worst case return the default one that's not capable of killing descendants at all.