我正在编写一个基于击打基象的小型码头容器,它提供了一个现成的runit。
我把卡桑德拉和奥普斯中心的特工放进了我的容器里。两者都是在/etc/service下作为服务启动的(如doc中所示)。
这个博客帖子提到my_init将收集僵尸进程,但对于它如何处理孤立进程却含糊不清。
下面是我的Docker容器中ps -ef的一个示例输出:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:05 ? 00:00:00 /usr/bin/python3 -u /sbin/my_init
root 27 1 0 06:05 ? 00:00:00 /usr/bin/runsvdir -P /etc/service
root 28 27 0 06:05 ? 00:00:00 runsv sshd
root 29 27 0 06:05 ? 00:00:00 runsv syslog-ng
root 30 27 0 06:05 ? 00:00:00 runsv cron
root 31 27 0 06:05 ? 00:00:00 runsv cassandra
root 32 27 0 06:05 ? 00:00:00 runsv syslog-forwarder
root 33 27 0 06:05 ? 00:00:00 runsv opscenter-agent
root 34 32 0 06:05 ? 00:00:00 tail -F -n 0 /var/log/syslog
root 35 30 0 06:05 ? 00:00:00 /usr/sbin/cron -f
root 36 29 0 06:05 ? 00:00:00 syslog-ng -F -p /var/run/syslog-ng.pid --no-caps
root 37 31 43 06:05 ? 00:00:10 java -ea -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar -XX:+CMSClassUnloadingEnabled -XX:+UseThreadPriorities -XX:ThreadPrio
root 38 33 0 06:05 ? 00:00:00 /bin/bash /usr/local/opscenter/datastax-agent-5.2.0/bin/datastax-agent -f
root 471 38 51 06:05 ? 00:00:11 /usr/lib/jvm/jre1.8.0_51/bin/java -Dagent-foreground=yes -Xmx128M -Djclouds.mpu.parts.magnitude=100000 -Djclouds.mpu.parts.size=1
root 494 0 0 06:05 ? 00:00:00 bash
root 761 494 0 06:05 ? 00:00:00 ps -ef注意,runsv opscenter-agent (pid 33)启动一个子进程,它是一个带有子进程(pid 471)的bash调用(pid 38)。
然后我运行了sv stop opscenter-agent和ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:05 ? 00:00:00 /usr/bin/python3 -u /sbin/my_init
root 27 1 0 06:05 ? 00:00:00 /usr/bin/runsvdir -P /etc/service
root 28 27 0 06:05 ? 00:00:00 runsv sshd
root 29 27 0 06:05 ? 00:00:00 runsv syslog-ng
root 30 27 0 06:05 ? 00:00:00 runsv cron
root 31 27 0 06:05 ? 00:00:00 runsv cassandra
root 32 27 0 06:05 ? 00:00:00 runsv syslog-forwarder
root 33 27 0 06:05 ? 00:00:00 runsv opscenter-agent
root 34 32 0 06:05 ? 00:00:00 tail -F -n 0 /var/log/syslog
root 35 30 0 06:05 ? 00:00:00 /usr/sbin/cron -f
root 36 29 0 06:05 ? 00:00:00 syslog-ng -F -p /var/run/syslog-ng.pid --no-caps
root 37 31 19 06:05 ? 00:00:11 java -ea -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar -XX:+CMSClassUnloadingEnabled -XX:+UseThreadPriorities -XX:ThreadPrio
root 471 1 20 06:05 ? 00:00:11 /usr/lib/jvm/jre1.8.0_51/bin/java -Dagent-foreground=yes -Xmx128M -Djclouds.mpu.parts.magnitude=100000 -Djclouds.mpu.parts.size=1
root 494 0 0 06:05 ? 00:00:00 bash
root 768 494 0 06:06 ? 00:00:00 ps -ef注pid 38已经消失,但是pid 471现在附加到my_init。
这行为正确吗?我该怎么做才能收获孩子的过程呢?
发布于 2015-08-13 10:55:57
my_init采用孤立进程并获取它们。但你误解了“收获”的意思。my_init不让它退出;my_init只等待它退出。您(或该进程)仍然负责确保它退出。
https://stackoverflow.com/questions/31668752
复制相似问题