/// <exception cref="System.IO.IOException"/>
 public override bool SignalContainer(string user, string pid, ContainerExecutor.Signal
                                      signal)
 {
     if (Log.IsDebugEnabled())
     {
         Log.Debug("Sending signal " + signal.GetValue() + " to pid " + pid + " as user "
                   + user);
     }
     if (!ContainerIsAlive(pid))
     {
         return(false);
     }
     try
     {
         KillContainer(pid, signal);
     }
     catch (IOException e)
     {
         if (!ContainerIsAlive(pid))
         {
             return(false);
         }
         throw;
     }
     return(true);
 }
예제 #2
0
        /// <exception cref="System.IO.IOException"/>
        public override bool SignalContainer(string user, string pid, ContainerExecutor.Signal
                                             signal)
        {
            VerifyUsernamePattern(user);
            string runAsUser = GetRunAsUser(user);

            string[] command = new string[] { containerExecutorExe, runAsUser, user, Sharpen.Extensions.ToString
                                                  (LinuxContainerExecutor.Commands.SignalContainer.GetValue()), pid, Sharpen.Extensions.ToString
                                                  (signal.GetValue()) };
            Shell.ShellCommandExecutor shExec = new Shell.ShellCommandExecutor(command);
            if (Log.IsDebugEnabled())
            {
                Log.Debug("signalContainer: " + Arrays.ToString(command));
            }
            try
            {
                shExec.Execute();
            }
            catch (Shell.ExitCodeException e)
            {
                int ret_code = shExec.GetExitCode();
                if (ret_code == LinuxContainerExecutor.ResultCode.InvalidContainerPid.GetValue())
                {
                    return(false);
                }
                Log.Warn("Error in signalling container " + pid + " with " + signal + "; exit = "
                         + ret_code, e);
                LogOutput(shExec.GetOutput());
                throw new IOException("Problem signalling container " + pid + " with " + signal +
                                      "; output: " + shExec.GetOutput() + " and exitCode: " + ret_code, e);
            }
            return(true);
        }
예제 #3
0
 public DelayedProcessKiller(Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container
                             container, string user, string pid, long delay, ContainerExecutor.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);
 }
        public virtual void TestContainerKill()
        {
            string appSubmitter = "nobody";
            string cmd          = LinuxContainerExecutor.Commands.SignalContainer.GetValue().ToString(
                );

            ContainerExecutor.Signal signal = ContainerExecutor.Signal.Quit;
            string sigVal = signal.GetValue().ToString();

            mockExec.SignalContainer(appSubmitter, "1000", signal);
            NUnit.Framework.Assert.AreEqual(Arrays.AsList(YarnConfiguration.DefaultNmNonsecureModeLocalUser
                                                          , appSubmitter, cmd, "1000", sigVal), ReadMockParams());
        }
 /// <summary>Send a specified signal to the specified pid</summary>
 /// <param name="pid">the pid of the process [group] to signal.</param>
 /// <param name="signal">
 /// signal to send
 /// (for logging).
 /// </param>
 /// <exception cref="System.IO.IOException"/>
 protected internal virtual void KillContainer(string pid, ContainerExecutor.Signal
                                               signal)
 {
     new Shell.ShellCommandExecutor(Shell.GetSignalKillCommand(signal.GetValue(), pid)
                                    ).Execute();
 }
 /// <exception cref="System.IO.IOException"/>
 protected internal override void KillContainer(string pid, ContainerExecutor.Signal
                                                signal)
 {
     WindowsSecureContainerExecutor.Native.Elevated.KillTask(pid);
 }
예제 #7
0
 /// <exception cref="System.IO.IOException"/>
 public abstract bool SignalContainer(string user, string pid, ContainerExecutor.Signal
                                      signal);