Я столкнулся с этим, ТАК отправьте:
https://stackoverflow.com/questions/356722/killing-a-defunct-process-on-unix-system
"Вы уничтожили процесс, но мертвый процесс не исчезает из таблицы процессов, пока ее родительский процесс не работает, задача назвала "жатву" (по существу вызов ожидают (3), чтобы тот процесс считал свой статус выхода). Мертвые процессы, которые не пожинали, называют "процессами-зомби".
Вот мой более не существующий процесс:
ps aux | grep ruby
1000 11958 16.3 0.0 0 0 pts/3 Z Jul11 1065:28 [ruby] <defunct>
Это - то, что это, как предполагалось, сделало:
RAILS_ENV=production bundle exec ruby lib/daemons/db_service_ctl start%
В основном это работает, демоны направляющих обрабатывают. Я хотел перезапустить его так, я пытался уничтожить его, но это отказалось умирать, и теперь у меня есть более не существующий процесс.
Вот его родительский процесс:
ps -f 11958
UID PID PPID C STIME TTY STAT TIME CMD
1000 11958 11957 16 Jul11 pts/3 Z 1065:28 [ruby] <defunct>
Родительский процесс 11957. proc cmdline похож на это:
/proc/11957 $ cat cmdline
/bin/sh./script/db_service.sh%
Это похоже на тот же сценарий оболочки, который я выполнил, поскольку демоны обрабатывают!
Таким образом, как это может быть родительским процессом также?
Просто - скрипт db.service.sh
, который является родителем вашего процесса ruby, запустил исполняемый файл (с PID 11958). Когда вы запускаете программу из сценария, это новый процесс, родительским элементом которого является сценарий, который ее вызвал. Рассмотрим следующий сценарий:
#!/bin/bash
cat
Когда вы запустите его как test.sh
, вы увидите, что bash является родителем, а cat - дочерним:
xxx 4087 10976 0 08:29 pts/2 00:00:00 /bin/bash ./test.sh
xxx 4088 4087 0 08:29 pts/2 00:00:00 cat