Почему OSX Activity Monitor не показывает процессы, которые я запустил?

Я использую fork и execv для запуска дочерних процессов. Если я запущу htop, я смогу найти эти процессы. Однако OSX Activity Monitor не показывает их, даже если я настроил отображение всех процессов. Почему это?

Столбец S в htop показывает Z для всех моих процессов. Что это значит? Может это как-то связано?


person node ninja    schedule 27.04.2011    source источник


Ответы (1)


Z в htop означает, что процесс является «зомби». Это означает, что процесс завершил выполнение и хочет умереть, но родительский процесс еще не вызвал wait() для получения кода выхода дочернего процесса.

Возможно, монитор активности OS X не показывает зомби-процессы.

person Greg Hewgill    schedule 27.04.2011
comment
Значит, эти порожденные программы не закрываются сами по себе? - person node ninja; 27.04.2011
comment
Они завершаются сами по себе, но обычно родитель хочет узнать, с каким кодом выхода завершился процесс. Это возможно только в том случае, если PID остается присвоенным этому процессу до тех пор, пока родитель не узнает, какой был код выхода. Зомби-процессы исчезают, когда либо (а) родитель вызывает wait() для рассматриваемого зомби, либо (б) родитель умирает. - person Greg Hewgill; 27.04.2011
comment
Если вы используете wait(), останавливает ли это выполнение родительского процесса до тех пор, пока дочерний процесс не завершится? - person node ninja; 27.04.2011
comment
Да, для wait(). Но похоже, что вы хотите использовать связанную функцию waitpid(). См. флаг WNOHANG до waitpid(). - person Greg Hewgill; 27.04.2011