Первый из этих вызовов stat_loc
, если последний находится в состоянии зомби. Значение stat_loc
может быть проанализировано с помощью следующих макроопределений:
WIFEXITED(status) | Возвращает истинное (ненулевое) значение, если процесс завершился нормально. |
WEXITSTATUS(status) | Если WIFEXITED(status) не равно нулю, определяет код возврата завершившегося процесса (аргумент функции |
WIFSIGNALLED(status) | Возвращает истину, если процесс завершился по сигналу. |
WTERMSIG(status) | Если WIFSIGNALLED(status) не равно нулю, определяет номер сигнала, вызвавшего завершение выполнения процесса. |
WCOREDUMP(status) | Если WIFSIGNALLED(status) не равно нулю, макрос возвращает истину в случае создания файла core. |
Системный вызов idtype
и id
определяют, за какими из дочерних процессов требуется следить:
Значение аргумента idtype | Описание |
---|---|
P_PID | id . |
P_PGID | id . |
P_ALL |
Аргумент options
содержит флаги, объединенные логическим ИЛИ, определяющие, за какими изменениями в состоянии потомков следит
Флаги аргумента options | Описание |
---|---|
WEXITED | Предписывает ожидать завершения выполнения процесса. |
WTRAPPED | Предписывает ожидать ловушки (trap) или точки останова (breakpoint) для трассируемых процессов. |
WSTOPPED | Предписывает ожидать останова процесса из-за получения сигнала. |
WCONTINUED | Предписывает вернуть статус процесса, выполнение которого было продолжено после останова. |
WNOHANG | Предписывает завершить свое выполнение, если отсутствует статусная информация (т.е. отсутствует ожидаемое событие). |
WNOWAIT | Предписывает получить статусную информацию, но не уничтожать ее, оставив дочерний процесс в состоянии ожидания. |
Аргумент infop
указывает на структуру siginfo_t
, которая будет заполнена информацией о потомке. Мы рассмотрим эту структуру в следующем разделе.
Функция
В заключение для иллюстрации описанных в этом разделе системных вызовов приведем схему работы командного интерпретатора при запуске команды.
...
/* Вывести приглашение shell*/
write(1, "$ ", 2);
/* Считать пользовательский ввод */
get_input(inputbuf);
/* Произвести разбор ввода: выделить команду cmd
и ее аргументы arg[] */
parse_input(inputbuf, and, arg);
/* Породить процесс */
pid = fork();
if (pid == 0) {
/* Запустить программу */
execvp(cmd, arg);
/* При нормальном запуске программы эта часть кода
выполняться уже не будет — можно смело выводить
сообщение об ошибке */
pexit(cmd);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии