Зомби-процессы еще живы и работают нормально, но не могут быть убиты?
Я что-то неправильно понимаю, или это не должно быть возможно?
Все мои процессы-демоны находятся в состоянии зомби после того, как я попытался остановить службу управления:
# 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
Процессы, приводящие к их остановке (мне нужно обновить их, поэтому я пытаюсь остановить их), не имеют никакого эффекта.
Я, вероятно, могу перезагрузиться, чтобы убить процессы, чтобы обновить их, но было бы неплохо узнать, что WTF здесь происходит с непобедимыми запущенными мертвыми процессами...
2 ответа
kill -9
уничтожит этих зомби.
Как правило, зомби случаются, когда родитель умирает, и дочерние процессы не закрываются должным образом родителем до его выхода. Это случается чаще, если вы kill
родитель, и он не грациозно закрывается (и забирает с собой всех детей). Это похоже на процесс "Сирота".
Процесс - это зомби во времени между выходом из процесса и родительским процессом, определяющим состояние выхода. Если зомби остается вокруг долгое время, это указывает на недостаток родителя этого зомби. Если родитель умирает, процесс наследуется процессом номер 1 (процесс init). init всегда должен иметь дело с зомби очень быстро. Если вы видите зомби с родительским pid 1, это означает, что что-то не так с init или ядром.