Книга: Программирование для Linux. Профессиональный подход
3.4.2. Системные вызовы wait()
3.4.2. Системные вызовы wait()
Самая простая функция в семействе называется wait()
. Она блокирует вызывающий процесс до тех пор, пока один из его дочерних процессов не завершится (или не произойдет ошибка). Код состояния потомка возвращается через аргумент, являющийся указателем на целое число. В этом коде зашифрована различная информация о потомке. Например, макрос WEXITSTATUS()
возвращает код завершения дочернего процесса. Макрос WIFEXITED()
позволяет узнать, как именно завершился процесс: обычным образом (с помощью функции exit()
или оператора return
функции main()
) либо аварийно вследствие получения сигнала. В последнем случае макрос WTERMSIG()
извлекает из кода завершения номер сигнала.
Ниже приведена доработанная версия функции main()
из файла fork-exec.c
. На этот раз программа вызывает функцию wait()
, чтобы дождаться завершения дочернего процесса, в котором выполняется команда ls
.
int main() {
int child_status;
/* Список аргументов, передаваемых команде ls. */
char* arg_list[] = {
"ls", /* argv[0] — имя программы. */
"-l",
"/",
NULL /* Список аргументов должен оканчиваться указателем
NULL. */
};
/* Порождаем дочерний процесс, который выполняет команду ls.
Игнорируем возвращаемый идентификатор дочернего процесса. */
spawn("ls*, arg_list);
/* Дожидаемся завершения дочернего процесса. */
wait(&child_status);
if (WTFEXITED(child_status));
printf("the child process exited normally, with exit code %dn",
WEXITSTATUS(child_status));
else
printf("the child process exited abnormallyn");
return 0;
}
Расскажем о других функциях семейства. Функция waitpid()
позволяет дождаться завершения конкретного дочернего процесса, а не просто любого. Функция wait3()
возвращает информацию о статистике использования центрального процессора завершившимся дочерним процессом. Функция wait4()
позволяет задать дополнительную информацию о том, завершения каких процессов следует дождаться.
- 5.10. Функции wait и waitpid
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- Системные вызовы и драйверы устройств
- ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
- Системные вызовы управления процессорной привязкой
- 6.6.4 sigwait and sigwaitinfo
- Вызовы функций
- Почему за время, пока компьютер выключен, сильно отстают системные часы, сбивается дата?
- Почему в ноутбуке пропали системные звуки? При этом звуковые файлы воспроизводятся только в Winamp. Переустанавливал дра...
- Другие системные вызовы для управления файлами
- 9.1.6.1. Использование функций POSIX: wait() и waitpid()
- 12.5.2. Системные текстовые журналы