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