僵尸进程仍然活着并且运行良好,但无法被杀死?

僵尸进程仍然活着并且运行良好,但无法被杀死?

是我误解了什么吗,还是这不可能?

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

# 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>

但端口仍然打开(虽然 netstat 找不到进程名称)

# 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让它们停止的进程(我需要升级它们,因此首先尝试停止它们)没有任何效果。

我可能需要重新启动来终止进程以便升级它们,但最好先弄清楚这里发生了什么,以及无敌的运行死亡进程......

答案1

kill -9将会消灭那些僵尸。

通常,僵尸进程发生在父进程死亡且子进程在父进程退出前没有被正确关闭时。如果父进程kill没有正常关闭(并带走所有子进程),则这种情况更常发生。这类似于孤儿进程。

答案2

在进程退出和父进程获得退出状态之间的时间内,进程是僵尸进程。如果僵尸进程停留很长时间,则表明该僵尸进程的父进程存在缺陷。如果父进程死亡,则进程号 1(init 进程)将继承该进程。init 应该总是能够快速处理僵尸进程。如果您看到父进程 pid 为 1 的僵尸进程,则表明 init 或内核存在问题。

相关内容