Что такое зомби-процесс или нить?

11

Что такое зомби-процесс или нить, и что их создает? Я просто убиваю их, или я могу сделать что-нибудь для диагностики того, как они умерли?

DeveloperDon
источник
13
Вы порезали им голову. Или ты их сжигаешь. Это единственный путь.
Саймон Бергот
«Побей их или сожги, они идут довольно легко» ...
TMN

Ответы:

17

Что такое зомби-процесс или нить, и что их создает?

Процесс зомби мертвых процессов.
ОС просто хранит информацию, чтобы родитель мог проверить код выхода процессов на более позднем этапе, так как ОС хранит информацию о них и, таким образом, они появляются при просмотре процессов.

Я просто убью их,

Нет, они уже мертвы
ОС будет очищаться, когда родитель умирает или получает код состояния от ОС.

или я могу сделать что-нибудь, чтобы получить диагностику о том, как они умерли?

Нет. Родитель может, но не оболочка.

Мартин Йорк
источник
4

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

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

Янник Мюллер
источник
2

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

Некоторым ОС (по замыслу) не разрешается динамически создавать или удалять ресурсы за пределами определенной точки события (например, VxWorks Cert). Такие системы часто обходят это ограничение, используя заранее выделенные пулы ресурсов, из которых они получают, возвращают и повторно используют элементы. Однако, когда процесс в такой системе завершается, он не может быть удален и вместо этого будет зомбирован (завершен и удален из списка планирования).

Надеюсь это поможет.

Спарки
источник
0

Когда поток / процесс уничтожен, но в соответствующей таблице все еще есть запись о нем, он становится зомби.

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

Нет способа избавиться от зомби, но перезагрузить

superM
источник
1
Перезагрузка не требуется. Просто убейте родительский процесс, и зомби будут автоматически очищены системой.
Кевин Панко