com.pmease.quickbuild.execution.killtree
Class ProcessTree

java.lang.Object
  extended by com.pmease.quickbuild.execution.killtree.ProcessTree
All Implemented Interfaces:
ProcessTreeRemoting.IProcessTree, java.lang.Iterable<ProcessTree.OSProcess>

public abstract class ProcessTree
extends java.lang.Object
implements java.lang.Iterable<ProcessTree.OSProcess>, ProcessTreeRemoting.IProcessTree

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.

Since:
1.315

Nested Class Summary
 class ProcessTree.OSProcess
          Represents a process.
 class ProcessTree.UnixProcess
          A process.
 
Field Summary
static boolean enabled
          Flag to control this feature.
protected  java.util.Map<java.lang.Integer,ProcessTree.OSProcess> processes
          To be filled in the constructor of the derived type.
 
Method Summary
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.
 ProcessTree.OSProcess get(int pid)
          Gets the process given a specific ID, or null if no such process exists.
abstract  ProcessTree.OSProcess get(java.lang.Process proc)
          Try to convert ProcessTree.OSProcess into this process object or null if it fails (for example, maybe the snapshot is taken after this process has already finished.)
 java.util.Iterator<ProcessTree.OSProcess> iterator()
          Lists all the processes in the system.
abstract  void killAll(java.util.Map<java.lang.String,java.lang.String> modelEnvVars, boolean forcibly)
          Kills all the processes that have matching environment variables.
 void killAll(java.lang.Process proc, java.util.Map<java.lang.String,java.lang.String> modelEnvVars, boolean forcibly)
          Convenience method that does #killAll(Map) and OSProcess#killRecursively().
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

processes

protected final java.util.Map<java.lang.Integer,ProcessTree.OSProcess> processes
To be filled in the constructor of the derived type.


enabled

public static boolean enabled
Flag to control this feature.

This feature involves some native code, so we are allowing the user to disable this in case there's a fatal problem.

This property supports two names for a compatibility reason.

Method Detail

get

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


iterator

public final java.util.Iterator<ProcessTree.OSProcess> iterator()
Lists all the processes in the system.

Specified by:
iterator in interface java.lang.Iterable<ProcessTree.OSProcess>

get

public abstract ProcessTree.OSProcess get(java.lang.Process proc)
Try to convert ProcessTree.OSProcess 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(java.util.Map<java.lang.String,java.lang.String> modelEnvVars,
                             boolean forcibly)
                      throws java.lang.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
Throws:
java.lang.InterruptedException

killAll

public void killAll(java.lang.Process proc,
                    java.util.Map<java.lang.String,java.lang.String> modelEnvVars,
                    boolean forcibly)
             throws java.lang.InterruptedException
Convenience method that does #killAll(Map) and 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.

Throws:
java.lang.InterruptedException

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.



Copyright © 2005-2010 PMEase Inc. All Rights Reserved.