Зомби-процессы еще живы и работают нормально, но не могут быть убиты?

Я что-то неправильно понимаю, или это не должно быть возможно?

Все мои процессы-демоны находятся в состоянии зомби после того, как я попытался остановить службу управления:

# 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 или ядром.

Другие вопросы по тегам