Книга: Программирование для Linux. Профессиональный подход

Листинг 3.7. (sigchld.c) Удаление дочерних процессов в обработчике сигнала SIGCHLD

Листинг 3.7. (sigchld.c) Удаление дочерних процессов в обработчике сигнала SIGCHLD

#include <signal.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
sig_atomic_t child_exit_status;
void clean_up_child_process(int signal_number) {
 /* Удаление дочернего процесса. */
 int status;
 wait(&status);
 /* Сохраняем статус потомка в глобальной переменной. */
 child_exit_status = status;
}
int main() {
 /* Обрабатываем сигнал SIGCHLD, вызывая функцию
    clean_up_child_process(). */
 struct sigaction sigchld_action;
 memset(&sigchld_action, 0, sizeof(sigchld_action));
 sigchld_action.sa_handler = &clean_up_child_process;
 sigaction(SIGCHLD, &sigchld_action, NULL);
 /* Далее выполняются основные действия, включая порождение
    дочернего процесса. */
 /* ... */
 return 0;
}

Оглавление книги


Генерация: 2.562. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз