Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
демон.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
333 Кб
Скачать
☆

23.7 Состояние Завершения Процесса

Если значение состояния выхода (см. Раздел 22.3 [Завершение Программы]) дочернего процесса - нуль, то значение состояния, сообщенное waitpid или wait - также нуль. Вы можете проверять другие виды информации, закодированные в возвращенном значении состояния, используя следующие макрокоманды. Эти макрокоманды определены в заглавном файле " sys/wait.h ".

int WIFEXITED (int status)

Эта макрокоманда возвращает значение отличное от нуля если дочерний процесс завершон exit или _exit.

int WEXITSTATUS (int status)

Если WIFEXITED - истина, эта макрокоманда возвращает 8 битов младшего разряда значения состояния выхода из дочернего процесса. См. Раздел 22.3.2 [Состояние Выхода].

int WIFSIGNALED (int status)

Эта макрокоманда возвращает значение отличное от нуля, если дочерний процесс завершен потому что он получил сигнал который не был обработан. См. Главу 21 [Обработка Сигнала].

int WTERMSIG (int status)

Если WIFSIGNALED - истина, эта макрокоманда возвращает номер сигнала, который завершил дочерний процесс.

int WCOREDUMP (int status)

Эта макрокоманда возвращает значение отличное от нуля, если дочерний процесс завершен и произведен core-файл.

int WIFSTOPPED (int status)

Эта макрокоманда возвращает значение отличное от нуля, если дочерний процесс остановлен.

int WSTOPSIG (int status)

Если WIFSTOPPED - истина, эта макрокоманда возвращает номер сигнала, который заставил дочерний процесс остановиться.

23.8 Bsd Функции Ожидания Процесса

Библиотека GNU также обеспечивает эти средства для совместимости с UNIX BSD. BSD использует тип данных union, чтобы представить значения состояния, а не int. Два представления фактически взаимозаменяемы; они описывают те же самые битовые шаблоны. Библиотека GNU C определяет макрокоманды типа WEXITSTATUS так, чтобы они работали на любом виде объекта, и функция wait определена, чтобы принять любой тип указателя как аргумент status_ptr.

Эти функции объявлены в " sys/wait.h ".

union wait (тип данных)

Этот тип данных представляет значения состояния окончания программы. Он имеет следующие элементы:

int w_termsig

Значение этого элемента - то же что результат WTERMSIG макрокоманды.

int w_coredump

Значение этого элемента - результат WCOREDUMP макрокоманды.

int w_retcode

Значение этого элемента - результат WEXITSTATUS макрокоманды.

int w_stopsig

Значение этого элемента - результат WSTOPSIG макрокоманды.

Вместо того, чтобы обращаться к этим элементам непосредственно, Вы должны использовать эквивалентные макрокоманды.

pid_t wait3 (union wait *status_ptr, int options, struct rusage *usage)

Если usage - пустой указатель, wait3 эквивалентна waitpid (-1, status_ptr, options).

Если usage - не пустой символ, wait3 сохраняет тип использования для дочернего процесса в *rusage (но только, если дочерний завершился, а не остановился). См. Раздел 17.5 [Использование Ресурсов].

pid_t wait4 (pid_t pid, union wait *status_ptr, int options, struct rusage *usage)

Если usage - пустой указатель, wait4 эквивалентна waitpid (pid, status_ptr, options).

Если usage - не пустой символ, wait4 сохраняет тип использования для дочернего процесса в *rusage (но только, если дочерний завершился, а не остановился). См. Раздел 17.5 [Использование Ресурсов].