public abstract class ProcessTree extends Object implements Iterable<ProcessTree.OSProcess>, ProcessTreeRemoting.IProcessTree, Serializable
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.
Modifier and Type | Class and Description |
---|---|
static class |
ProcessTree.Local
Represents a local process tree, where this JVM and the process tree run on the same system.
|
class |
ProcessTree.OSProcess
Represents a process.
|
static interface |
ProcessTree.ProcessCallable<T>
Code that gets executed on the machine where the
ProcessTree.OSProcess is local. |
static class |
ProcessTree.Remote
Represents a process tree over a channel.
|
class |
ProcessTree.UnixProcess
A process.
|
Modifier and Type | Field and Description |
---|---|
static boolean |
enabled
Flag to control this feature.
|
protected Map<Integer,ProcessTree.OSProcess> |
processes
To be filled in the constructor of the derived type.
|
Modifier and Type | Method and Description |
---|---|
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(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.) |
Iterator<ProcessTree.OSProcess> |
iterator()
Lists all the processes in the system.
|
abstract void |
killAll(Map<String,String> modelEnvVars)
Kills all the processes that have matching environment variables.
|
void |
killAll(Process proc,
Map<String,String> modelEnvVars)
Convenience method that does
killAll(Map) and ProcessTree.OSProcess.killRecursively() . |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEach, spliterator
protected final Map<Integer,ProcessTree.OSProcess> processes
public static boolean enabled
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.
public final ProcessTree.OSProcess get(int pid)
public final Iterator<ProcessTree.OSProcess> iterator()
iterator
in interface Iterable<ProcessTree.OSProcess>
public abstract ProcessTree.OSProcess get(Process proc)
Process
into this process object
or null if it fails (for example, maybe the snapshot is taken after
this process has already finished.)public abstract void killAll(Map<String,String> modelEnvVars) throws InterruptedException
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.
killAll
in interface ProcessTreeRemoting.IProcessTree
InterruptedException
public void killAll(Process proc, Map<String,String> modelEnvVars) throws InterruptedException
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.InterruptedException
public static ProcessTree get()
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 © 2016. All rights reserved.