Ubuntu 16.04 /bin/kill 有错误吗?

Ubuntu 16.04 /bin/kill 有错误吗?

我最近使用 VMware 在虚拟机上安装了 Ubuntu 16.04。为了测试我的 MapReduce 代码,我还安装了 Hadoop 2.7.3 并设置了一个单节点集群。

当我执行 MapReduce 算法时,我使用的每个进程(包括 NameNode、DataNode、ResourceManager、NodeManager 和 ssh 会话)都会在没有任何警告的情况下被终止。

为了调查,我创建了一个包装脚本,在将 /bin/kill 移动到 /bin/temp/kill 后,该脚本记录 /bin/kill 进程的输入参数

date >> /home/user/log.txt
echo "$@" >> /home/user/log.txt
echo "$#" >> /home/user/log.txt
w >> /home/user/log.txt
/bin/temp/kill $@

MapReduce Job启动后,各个进程都会被kill掉,日志文件的内容如下:

Sun Aug 28 03:39:19 KST 2016
-0 -18953
2
03:39:19 up 14 min,  1 user,  load average: 4.74, 2.65, 1.78
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user   tty1                      03:36    3:27   0.06s  0.06s -bash

Sun Aug 28 03:39:19 KST 2016
-15 -18844
2
03:39:19 up 14 min,  1 user,  load average: 4.74, 2.65, 1.78
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user   tty1                      03:36    3:27   0.06s  0.00s     /usr/bin/clear_console -q

一旦调用“kill -0 -1xxxx”,我的进程就会被杀死,这是由于 kill 的错误报告在https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1610499

我添加了 ps ax >> /home/user/log.txt 并且 pid 为 18844 的进程是

 18844 ?        Ss     0:00 /bin/bash -c /usr/lib/jvm/default-java/bin/java -Djava.io.tmpdir=/usr/local/hadoop-datastore/hadoop-2.7.3/nm-local-dir/usercache/user/appcache/application_1472323092836_0001/container_1472323092836_0001_01_000001/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/usr/local/hadoop-2.7.3/logs/userlogs/application_1472323092836_0001/container_1472323092836_0001_01_000001 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog -Xmx1024m org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1>/usr/local/hadoop-2.7.3/logs/userlogs/application_1472323092836_0001/container_1472323092836_0001_01_000001/stdout 2>/usr/local/hadoop-2.7.3/logs/userlogs/application_1472323092836_0001/container_1472323092836_0001_01_000001/stderr

我认为某些 Hadoop 守护进程(例如 NodeManager)想要终止 YarnChild,因为 YarnChild 使用的内存超过了其可使用的内存量。但这会导致终止所有进程。

Q1. 杀死进程 id 为负整数的进程是什么意思?为什么不像正常进程那样为正数。

Q2. 如果这是 Hadoop 的另一个错误,它使用负 pid 调用 kill,我如何找到哪个进程调用了“kill -15 -18844”?我想找到该进程并将该错误报告给 Hadoop 社区。

我从 procps-ng 3.3.12 重新编译了 /bin/kill,一切正常。谢谢。

相关内容