Sobes.tech
Назад к вопросам
Junior — Middle
71

Можете объяснить, что означает сигнал SIGCHLD в операционной системе?

Ответ от нейросети

sobes.tech AI

Сигнал SIGCHLD в операционных системах Unix/Linux посылается родительскому процессу, когда один из его дочерних процессов завершает работу или изменяет состояние (например, останавливается или возобновляется).

Родитель может обработать этот сигнал, чтобы узнать о завершении дочернего процесса и освободить связанные с ним ресурсы (например, вызвать wait() или waitpid()), предотвращая появление зомби-процессов.

Пример обработки SIGCHLD на C:

#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

void sigchld_handler(int signo) {
    int status;
    while (waitpid(-1, &status, WNOHANG) > 0) {
        printf("Child process terminated\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // дочерний процесс
        _exit(0);
    }
    // родительский процесс
    pause(); // ждать сигналов
    return 0;
}

Таким образом, SIGCHLD помогает эффективно управлять жизненным циклом дочерних процессов.