Если я выполню команду «ps» в оболочке, я могу получить некоторые процессы, помеченные как «» - они завершены, но родительский процесс еще не получает статус выхода. Иногда при отладке сетевых приложений мне нужно получить статус выхода такого процесса из оболочки - это 0 или какой-то код ошибки, такой как ошибка сегментации?
Возможно ли получить этот статус выхода из данной оболочки PID
, или только родительский процесс зомби может получить этот статус выхода?
P.S. Мне не нужно их «убивать», «закрывать» и т. Д. Мне нужно только проверить их статус выхода :)
Определение процесса зомби - это процесс, который завершает выполнение, но у него все еще есть статус выхода, чтобы сообщить об этом частичному процессу (которого, по-видимому, больше нет), из-за этого ядро сохранит его в таблице процессов, это больше не запланировано для дальнейшего выполнения, но не может быть удалено и не позволяет повторно использовать PID до тех пор, пока статус выхода не будет определен как ненужный.
Итак, согласно этому определению, если вы «получаете» код выхода, вы полностью разрешаете процесс зомби. Вам понадобится модуль ядра, который может обращаться к структурам ядра. Обычно только родительский элемент или init могут читать значение из waitpid (), но я помню, как читал, что с новыми ядрами есть способ, чтобы «контроллеры» процесса занимали место init, то есть они будут усыновлять таких дочерних элементов, поэтому, если вы не мне наплевать на убийство родителя ... это тоже был бы работоспособный способ.
Я пошел через / proc, чтобы посмотреть, есть ли что-то оттуда, но из-за природы кодов выхода это не будет там представлено ...
Код выхода доступен в /proc/pid/stat
поскольку 5b172087f99189416d5f47fd7ab5e6fb762a9ba3, наверное, к тому времени, когда этот вопрос был задан, он был слишком новым ... :)
В настоящее время вы можете получить код выхода из последней цифры в /proc/pid/stat
.