Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Завершение Процесса




Функции, описанные в этом разделе используются, для ожидания завершения или останова дочернего процесса и определения его состояние. Эти функции объявлены в заглавном файле "sys/wait.h".

pid_t waitpid (pid_t pid, int *status_ptr, int options)

Функция waitpid используется, чтобы запросить информацию состояния дочернего процесса, чей ID является pid. Обычно, вызывающий процесс приостановлен, пока дочерний процесс не делает информацию состояния доступной, завершаясь.

Другие значения для pid аргумента имеют специальные интерпретации. Значение -1 или WAIT_ANY запрашивает информацию состояния для любого дочернего процесса; значение 0 или WAIT_MYPGRP запрашивает информацию для любого дочернего процесса в той же самой группе процесса, что и вызывающий процесс; и любое другое отрицательное значение -pgid запрашивает информацию для любого дочернего процесса, чей ID группы - pgid.

Если информация состояния дочернего процесса доступна немедленно, эта функция возвращает упрпавление немедленно без ожидания. Если доступна информация состояния более, чем одного дочернего процесса, один из них будет выбран случайным образом, и его состояние возвращено немедленно.

Чтобы получить состояние других дочерних процессов, необходимо повторно вызвать waitpid снова.

Аргумент options - битовая маска. Значение должно быть поразрядным ИЛИ нуля или большего количества флагов WNOHANG и WUNTRACED. Вы можете использовать флаг WNOHANG, чтобы указать, что родительский процесс не должен ждать и флаг WUNTRACED, чтобы запросить информацию состояния остановленных процессов также как процессов, которые завершились.

Информация состояния дочернего процесса сохранена в объекте, на который указывает status_ptr, если status_ptr не пустой указатель.

Возвращаемое значение - обычно ID дочернего процесса, о чьем состоянии сообщено. Если опция WNOHANG была определена и никакой дочерний процесс, не ждет, чтобы быть отмеченным, то значение - нуль. Значение -1 возвращено в случае ошибки. Следующие коды ошибок errno определены для этой функции:

EINTR

Функция была прервана получением сигнала.

ECHILD

Не имеется никаких дочерних процессов, или заданный pid не дочерний для вызывающего процесса.

EINVAL

Недопустимое значение аргумента options.

Эти символические константы определены как значения для pid аргумента waitpid функции.

WAIT_ANY

Этот макрос (чье значение -1) определяет, что waitpid должен возвратить информацию состояния относительно любого дочернего процесса.

WAIT_MYPGRP

Эта константа (со значением 0) определяет, что waitpid должен возвратить информацию состояния относительно любого дочернего процесса в той же самой группе процесса что и вызывающий процесс.

Эти символические константы определены как флаги для аргумента options функции waitpid.

Следующие флаги могут быть объединены по ИЛИ.

WNOHANG

Этот флаг определяет, что waitpid должна возвратиться немедленно вместо ожидания, если не имеется никакого дочернего процесса, готового быть отмеченным.

WUNTRACED

Этот флаг определяет, что waitpid должна сообщить состояние любых дочерних процессов, которые были остановлены также как и тех, которые завершились.

pid_t wait (int *status_ptr)

Это - упрощенная версия waitpid; используется, чтобы ждать пока не завершится любой дочерний процесс. Обращение:

wait (&status)

эквивалентно:

waitpid (-1, &status, 0)

Приведем пример того, как использовать waitpid, чтобы получить состояние всех дочерних процессов, которые завершились, без какого-либо ожидания. Эта функция разработана как обработчик для сигнала SIGCHLD, который указывает, что по крайней мере один дочерний процесс завершился.

void

sigchld_handler (int signum)

{

int pid;

int status;

while (1)

{

pid = waitpid (WAIT_ANY, &status,

WNOHANG);

if (pid < 0)

{

perror ("waitpid");

break;

}

if (pid == 0)

break;

notice_termination (pid, status);

}

}




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 260; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.