» Обычно с дочерними процессами делают так: ловят SIGCHLD, а потом отдельно вызывают waitpid(), чтобы узнать, кто завершился и с каким статусом. Но есть более интересный режим - SA_SIGINFO. Если повесить обработчик через sigaction() и включить флаг SA_SIGINFO, ядро передаст в обработчик структуру siginfo_t с деталями по дочернему процессу. Там уже есть: • PID дочернего процесса • статус завершения • сигнал, если процесс был убит сигналом • причина генерации SIGCHLD • код события: завершился, был остановлен, продолжен и так далее То есть вместо «что-то случилось с ребёнком» программа получает нормальный контекст события прямо в обработчике сигнала. Примерно так можно понять разницу: CLD_EXITED - процесс завершился сам CLD_KILLED - процесс убит сигналом info->si_pid - какой именно процесс info->si_status - код выхода или номер сигнала Это удобная штука для рантаймов, супервизоров, init-систем, job runners и всего, что управляет дочерними процессами. Вреальном коде не сто
⚡️ Linux может передать в SIGCHLD гораздо больше, чем просто «дочерний процесс завершился
2 дня назад2 дня назад
22
1 мин