Уничтожение несуществующего процесса в системе UNIX [закрыто]

StackOverflow https://stackoverflow.com/questions/356722

Вопрос

У меня есть несуществующий процесс в моей системе:

abc      22093 19508  0 23:29 pts/4    00:00:00 grep ProcA
abc      31756     1  0 Dec08 ?        00:00:00 [ProcA_my_collect] <defunct>

Как я могу завершить вышеупомянутый процесс без перезагрузки компьютера?Я пробовал с

kill -9 31756
sudo kill -9 31756
Это было полезно?

Решение

Вы завершили процесс, но мертвый процесс не исчезает из таблицы процессов до тех пор, пока его родительский процесс не выполнит задачу под названием "сбор урожая" (по сути, вызывающую wait(3) чтобы этот процесс считывал свой статус завершения).Мертвые процессы, которые не были собраны , называются "процессы зомби."

Идентификатор родительского процесса, который вы видите для 31756, - это идентификатор процесса 1, который всегда принадлежит init.Этот процесс должен периодически использовать свои процессы-зомби, но если он не сможет, они останутся зомби в таблице процессов до тех пор, пока вы не перезагрузитесь.

Другие советы

Проверяли ли вы наличие дочернего процесса, который, возможно, потребуется сначала уничтожить?Иногда замятие происходит в конце линии...Попробуй ps -ef --forest

чтобы увидеть, что может быть под ним (если что-нибудь), сначала убейте это, а затем то, о чем вы уже знаете

Если kill -9 не удается завершить процесс, причиной почти всегда является ошибка драйвера или операционной системы.

Процесс инициализации принял этот процесс, но он не может воспользоваться им.То есть сказать:когда init вызывает wait(2), этот процесс не возвращается.Одна из основных целей init - собрать мертвых детей-сирот, поэтому проблема не в том, что его родитель умер до того, как его собрали.Подумай:В противном случае, кто пожинает плоды процесса nohup'd после выхода из системы?

Уничтожение дочерних элементов несуществующего процесса вряд ли поможет, если только они каким-то образом не связаны с конкретной ошибкой, которую вы видите.

Вероятно, вы не сможете этого сделать, если убийство родителя не решит проблему.По какой-то причине системы не собирают этот зомби-процесс.

FWIW, я видел это довольно часто на SCO Openserver boxen, который я использовал для администрирования.Интенсивное многопользовательское использование и низкие системные ресурсы, но, похоже, это ничему не повредило.Просто разозлил меня.:)

Процесс, вероятно, зависает, напримеригнорируя сигналы, такие как SIGPIPE, проверьте с помощью strace -p <pid> что здесь происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top