ВУЗ:
Составители:
18
Завершение процесса
Следующие функции используются для ожидания завершения работы или
остановки работы дочернего процесса. Они определены в заголовочном файле
<sys/wait.h>.
pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)
Используется для запроса информации о состоянии дочернего процесса,
идентификатор которого равен PID. Обычно вызывающий процесс приостанавливает
выполнение до тех пор, пока дочерний процесс не завершит выполнение.
Аргумент PID может принимать и другие значения. Значение –1 означает
ожидание любого процесса, 0 – запрашивает информацию о процессах, находящихся в
той же группе процессов.
Если информация о состоянии процесса доступна немедленно, функция не
ожидает окончания выполнения процесса. Если запрошен статус нескольких процессов,
то возвращается статус случайного процесса.
Аргумент OPTIONS является битовой маской, значение которой может
формироваться из следующих макросов:
WNOHANG Родительский процесс не должен ожидать завершения дочернего;
WUNTRACED Запрашивается информация об остановленных и завершенных
процессах.
Информация о состоянии сохраняется в объекте, на который указывает
STATUS-PTR если он не является нулевым указателем.
В случае нормального завершения функция возвращает идентификатор
процесса, для которого запрашивается состояние, иначе возвращается –1. Переменная
errno может принимать следующие значения:
EINTR Выполнение функции прервалось поступившим сигналом;
ECHILD Отсутствуют дочерние процессы или процесс, идентификатор
которого передан в функции не является дочерним;
EINVAL Неверное значение аргумента OPTIONS.
pid_t wait (int *STATUS-PTR)
Упрощенная версия предыдущей функции. Ожидает завершение любого
дочернего процесса. Вызов
wait (&status)
эквивалентен вызову
waitpid (-1, &status, 0)
Приведем пример использования waitpid для получения состояния всех
завершенных дочерних процессов бех ожидания.
void
sigchld_handler (int signum)
{
int pid, status, serrno;
serrno = errno;
while (1)
{
pid = waitpid (WAIT_ANY, &status, WNOHANG);
if (pid < 0)
{
perror ("waitpid");
break;
}
if (pid == 0)
break;
notice_termination (pid, status);
}
errno = serrno;
}
Завершение процесса
Следующие функции используются для ожидания завершения работы или
остановки работы дочернего процесса. Они определены в заголовочном файле
.
pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)
Используется для запроса информации о состоянии дочернего процесса,
идентификатор которого равен PID. Обычно вызывающий процесс приостанавливает
выполнение до тех пор, пока дочерний процесс не завершит выполнение.
Аргумент PID может принимать и другие значения. Значение –1 означает
ожидание любого процесса, 0 – запрашивает информацию о процессах, находящихся в
той же группе процессов.
Если информация о состоянии процесса доступна немедленно, функция не
ожидает окончания выполнения процесса. Если запрошен статус нескольких процессов,
то возвращается статус случайного процесса.
Аргумент OPTIONS является битовой маской, значение которой может
формироваться из следующих макросов:
WNOHANG Родительский процесс не должен ожидать завершения дочернего;
WUNTRACED Запрашивается информация об остановленных и завершенных
процессах.
Информация о состоянии сохраняется в объекте, на который указывает
STATUS-PTR если он не является нулевым указателем.
В случае нормального завершения функция возвращает идентификатор
процесса, для которого запрашивается состояние, иначе возвращается –1. Переменная
errno может принимать следующие значения:
EINTR Выполнение функции прервалось поступившим сигналом;
ECHILD Отсутствуют дочерние процессы или процесс, идентификатор
которого передан в функции не является дочерним;
EINVAL Неверное значение аргумента OPTIONS.
pid_t wait (int *STATUS-PTR)
Упрощенная версия предыдущей функции. Ожидает завершение любого
дочернего процесса. Вызов
wait (&status)
эквивалентен вызову
waitpid (-1, &status, 0)
Приведем пример использования waitpid для получения состояния всех
завершенных дочерних процессов бех ожидания.
void
sigchld_handler (int signum)
{
int pid, status, serrno;
serrno = errno;
while (1)
{
pid = waitpid (WAIT_ANY, &status, WNOHANG);
if (pid < 0)
{
perror ("waitpid");
break;
}
if (pid == 0)
break;
notice_termination (pid, status);
}
errno = serrno;
}
18
Страницы
- « первая
- ‹ предыдущая
- …
- 16
- 17
- 18
- 19
- 20
- …
- следующая ›
- последняя »
