Linux, где хранятся коды возврата системных демонов и других процессов?
Как мне узнать, завершил ли процесс свое выполнение без ошибок? Как мне узнать, вернула ли программа на С ++ успех ОС?
Если я запускаю его через оболочку, то могу использовать $?, Однако, если я проверяю состояние процесса, инициированного другим пользователем, как я могу проверить состояние?
Скажем, я начал процесс утром, и он закончился в полдень. До вечера я работал на некоторых других мероприятиях, и перед отъездом я хотел бы проверить, какие процессы вернулись в ОС. Как я могу достичь этого, программно. Пробежка по системному журналу могла бы помочь, но поиск альтернатив.
Я мог бы пробежаться по таблице процессов ОС и прочитать эту информацию, однако она звучит немного сложнее для моего требования. Есть ли у нас что-то вроде системного журнала, где записываются все ошибки процессов?
Есть ли другие способы получения ошибок, о которых сообщают завершенные процессы (и других пользователей)?
1 ответ
Когда процесс завершается, его родительский процесс должен подтвердить это, используя wait
или же waitpid
функция. Эти функции также возвращают статус выхода. После звонка wait
или же waitpid
запись таблицы процессов удаляется, и состояние выхода больше не сохраняется нигде в операционной системе. Вы должны проверить, сохраняет ли программное обеспечение, которое вы используете для запуска процесса, где-нибудь состояние выхода.
Если родительский процесс не подтвердил, что дочерний процесс завершен, вы можете прочитать его состояние выхода из /proc
файловая система: это последнее поле в /proc/[pid]/stat
, Он хранится в том же формате, что wait
возвращает его, поэтому вы должны разделить на 256, чтобы получить код выхода. Также вы, вероятно, должны быть пользователем root.