diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java index 1c670a16ae9de..49c94370cd22f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ContainerExecutor.java @@ -47,6 +47,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerDiagnosticsUpdateEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch; import org.apache.hadoop.yarn.server.nodemanager.util.ProcessIdFileReader; +import org.apache.hadoop.yarn.util.ConverterUtils; import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.StringUtils; @@ -486,7 +487,11 @@ public DelayedProcessKiller(Container container, String user, String pid, public void run() { try { Thread.sleep(delay); - containerExecutor.signalContainer(user, pid, signal); + ContainerId containerId = container.getContainerId(); + String containerIdStr = ConverterUtils.toString(containerId); + if(null != containerIdStr && shouldDoSignal(containerIdStr, pid)){ + containerExecutor.signalContainer(user, pid, signal); + } } catch (InterruptedException e) { return; } catch (IOException e) { @@ -497,5 +502,26 @@ public void run() { .getContainerId(), message)); } } + + /** + * to check if the process is the container process + * @param containerIdStr + * @param processId + * @return + */ + private boolean shouldDoSignal(String containerIdStr, String processId) + { + try { + LOG.debug("here will do ps for " + containerIdStr); + String ret = Shell.execCommand("/bin/sh", "-c", "ps -ef | grep " + processId); + LOG.debug(ret); + boolean match = ret.contains(containerIdStr); + LOG.debug("match " + match); + return match; + } catch (IOException e) { + LOG.warn("not able to execute command /bin/sh -c 'ps'" ); + } + return false; + } } }