Назад | Перейти на главную страницу

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

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

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

# 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 происходит здесь с непобедимыми запущенными мертвыми процессами ...

kill -9 истребит этих зомби.

Как правило, зомби случаются, когда родитель умирает, и дочерние процессы не завершаются должным образом родителем до того, как он завершится. Это происходит чаще, если вы kill родительский, и он не закрывается изящно (и забирает с собой всех детей). Это похоже на сиротский процесс.

Процесс - это зомби во времени между завершением процесса и получением родительским статусом статуса выхода. Если зомби остается здесь долгое время, это указывает на недостаток в родителях этого зомби. Если родитель умирает, процесс наследуется процессом номер 1 (процесс init). init всегда должен очень быстро справляться с зомби. Если вы видите зомби с родительским pid 1, это означает, что что-то не так с init или ядром.