new DelayedProcessKiller(container, user, processId, sleepDelayBeforeSigKill, Signal.KILL, exec).start();
new DelayedProcessKiller(container, user, processId, sleepDelayBeforeSigKill, Signal.KILL, exec).start();
new DelayedProcessKiller(container, user, processId, sleepDelayBeforeSigKill, Signal.KILL, exec).start();
/** * Basic constructor. * * @param container the container to signal * @param user the user as whow to send the signal * @param pid the PID of the container process * @param delayMS the period of time to wait in millis before signaling * the container * @param signal the signal to send * @param containerExecutor the executor to use to send the signal */ public DelayedProcessKiller(Container container, String user, String pid, long delayMS, Signal signal, ContainerExecutor containerExecutor) { this.container = container; this.user = user; this.pid = pid; this.delay = delayMS; this.signal = signal; this.containerExecutor = containerExecutor; setName("Task killer for " + pid); setDaemon(false); }
@Override public void run() { try { Thread.sleep(delay); containerExecutor.signalContainer(new ContainerSignalContext.Builder() .setContainer(container) .setUser(user) .setPid(pid) .setSignal(signal) .build()); } catch (InterruptedException e) { interrupt(); } catch (IOException e) { String message = "Exception when user " + user + " killing task " + pid + " in DelayedProcessKiller: " + StringUtils.stringifyException(e); LOG.warn(message); container.handle(new ContainerDiagnosticsUpdateEvent( container.getContainerId(), message)); } } }
private void signalProcess(String processId, String user, String containerIdStr) throws IOException { if (LOG.isDebugEnabled()) { LOG.debug("Sending signal to pid " + processId + " as user " + user + " for container " + containerIdStr); } final ContainerExecutor.Signal signal = sleepDelayBeforeSigKill > 0 ? ContainerExecutor.Signal.TERM : ContainerExecutor.Signal.KILL; boolean result = sendSignal(user, processId, signal); if (LOG.isDebugEnabled()) { LOG.debug("Sent signal " + signal + " to pid " + processId + " as user " + user + " for container " + containerIdStr + ", result=" + (result ? "success" : "failed")); } if (sleepDelayBeforeSigKill > 0) { new ContainerExecutor.DelayedProcessKiller(container, user, processId, sleepDelayBeforeSigKill, ContainerExecutor.Signal.KILL, exec).start(); } }
public DelayedProcessKiller(Container container, String user, String pid, long delay, Signal signal, ContainerExecutor containerExecutor) { this.container = container; this.user = user; this.pid = pid; this.delay = delay; this.signal = signal; this.containerExecutor = containerExecutor; setName("Task killer for " + pid); setDaemon(false); } @Override
public DelayedProcessKiller(Container container, String user, String pid, long delay, Signal signal, ContainerExecutor containerExecutor) { this.container = container; this.user = user; this.pid = pid; this.delay = delay; this.signal = signal; this.containerExecutor = containerExecutor; setName("Task killer for " + pid); setDaemon(false); } @Override
public DelayedProcessKiller(Container container, String user, String pid, long delay, Signal signal, ContainerExecutor containerExecutor) { this.container = container; this.user = user; this.pid = pid; this.delay = delay; this.signal = signal; this.containerExecutor = containerExecutor; setName("Task killer for " + pid); setDaemon(false); } @Override