/******************************************************************************* * * Copyright (c) 2004-2009 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * Kohsuke Kawaguchi * * *******************************************************************************/ package hudson.util; import hudson.EnvVars; import hudson.util.ProcessTree.OSProcess; import java.util.Map; /** * Kills a process tree to clean up the mess left by a build. * * @author Kohsuke Kawaguchi * @since 1.201 * @deprecated as of 1.315. Use {@link ProcessTree}. */ public final class ProcessTreeKiller { /** * Short for {@code kill(proc,null)} * * @deprecated Use {@link OSProcess#killRecursively()} */ public void kill(Process proc) throws InterruptedException { kill(proc, null); } /** * In addition to what {@link #kill(Process)} does, also tries to kill all * the daemon processes launched. * * <p> Kills the given process (like {@link Process#destroy()} but also * attempts to kill descendant processes created from the given process. * * <p> In addition, optionally perform "search and destroy" based on * 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. * * <p> The implementation is obviously OS-dependent. * * @param proc Process to be killed recursively. Can be null. * @param modelEnvVars If non-null, search-and-destroy will be performed. * @deprecated Use {@link ProcessTree#killAll(Map)} and * {@link OSProcess#killRecursively()} */ public void kill(Process proc, Map<String, String> modelEnvVars) throws InterruptedException { ProcessTree pt = ProcessTree.get(); if (proc != null) { pt.get(proc).killRecursively(); } if (modelEnvVars != null) { pt.killAll(modelEnvVars); } } /** * Short for {@code kill(null,modelEnvVars)} * * @deprecated Use {@link ProcessTree#killAll(Map)} */ public void kill(Map<String, String> modelEnvVars) throws InterruptedException { kill(null, modelEnvVars); } /** * Creates a magic cookie that can be used as the model environment variable * when we later kill the processes. * * @deprecated Use {@link EnvVars#createCookie()} */ public static EnvVars createCookie() { return EnvVars.createCookie(); } /** * Gets the {@link ProcessTreeKiller} suitable for 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. */ public static ProcessTreeKiller get() { return new ProcessTreeKiller(); } }