僵尸进程仍然活着,工作正常,但不能被杀害?

我误解了什么,或者这不可能?

我试图停止控制服务后,所有的守护进程都处于僵尸状态:

# ps ax | grep controller 13768 pts/11 S+ 0:00 grep controller 26866 ? Zl 18:56 [controller] <defunct> 26870 ? Zl 18:57 [controller] <defunct> 26871 ? Zl 18:45 [controller] <defunct> 26876 ? Zl 13:17 [controller] <defunct> 26877 ? Zl 10:28 [controller] <defunct> 26880 ? Zl 18:18 [controller] <defunct> 26881 ? Zl 12:01 [controller] <defunct> 26882 ? Zl 18:18 [controller] <defunct> 

但是端口仍然是打开的(尽pipenetstat找不到进程名)

 # netstat -tlpn | sort Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1180/sshd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11882/httpd tcp 0 0 10.0.0.50:8890 0.0.0.0:* LISTEN - tcp 0 0 10.0.0.50:8891 0.0.0.0:* LISTEN - tcp 0 0 10.0.0.50:8892 0.0.0.0:* LISTEN - tcp 0 0 10.0.0.50:8896 0.0.0.0:* LISTEN - tcp 0 0 10.0.0.50:8897 0.0.0.0:* LISTEN - tcp 0 0 10.0.0.50:8900 0.0.0.0:* LISTEN - 

虽然lsof 可以看到进程名称

 # lsof -i -n -P | grep 10.0.0.50 | grep LISTEN controlle 26866 devuser 82u IPv4 323641 0t0 TCP 10.0.0.50:8890 (LISTEN) controlle 26870 devuser 82u IPv4 323629 0t0 TCP 10.0.0.50:8891 (LISTEN) controlle 26871 devuser 82u IPv4 323635 0t0 TCP 10.0.0.50:8892 (LISTEN) controlle 26876 devuser 82u IPv4 323643 0t0 TCP 10.0.0.50:8896 (LISTEN) controlle 26877 devuser 82u IPv4 323615 0t0 TCP 10.0.0.50:8897 (LISTEN) controlle 26880 devuser 82u IPv4 323647 0t0 TCP 10.0.0.50:8900 (LISTEN) controlle 26881 devuser 82u IPv4 323649 0t0 TCP 10.0.0.50:8901 (LISTEN) controlle 26882 devuser 82u IPv4 323631 0t0 TCP 10.0.0.50:8902 (LISTEN) 

而最奇怪的是,这些僵尸进程似乎工作正常:

 # curl http://10.0.0.50:8892/status {"status": "ok"} 

kill进程,使他们停止(我需要升级他们,因此试图阻止他们在第一位)没有任何影响。

我可能会重新启动杀死进程,以升级他们,但它是很好的找出跆拳道发生在这里无敌运行死亡过程第一…

kill -9会消灭那些僵尸。

通常情况下,僵尸发生在父母死亡和subprocess没有正确closures父母退出之前。 如果你kill了父母并且没有正常closures(并把所有的孩子带走),这种情况会更频繁发生。 这与孤儿过程相似。

一个进程是在进程退出和父进程退出状态之间的僵尸。 如果一个僵尸长时间呆在家里,那就表明这个僵尸的父母有缺陷。 如果父母死亡,则进程由进程号1(init进程)inheritance。 初始化应该总是很快处理僵尸。 如果您看到带有父pid 1的僵尸,则表示init或内核有问题。