Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, co oznacza sygnał SIGCHLD w systemie operacyjnym?

sobes.tech AI

Odpowiedź od AI

Sygnał SIGCHLD w systemach operacyjnych Unix/Linux jest wysyłany do procesu rodzica, gdy jeden z jego procesów potomnych kończy działanie lub zmienia stan (np. zostaje zatrzymany lub wznowiony).

Proces rodzica może obsłużyć ten sygnał, aby dowiedzieć się, kiedy proces potomny zakończył działanie i zwolnić związane z nim zasoby (np. wywołując wait() lub waitpid()), zapobiegając powstawaniu procesów zombie.

Przykład obsługi SIGCHLD w języku 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("Proces potomny zakończył działanie\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // proces potomny
        _exit(0);
    }
    // proces rodzica
    pause(); // oczekiwanie na sygnały
    return 0;
}

W ten sposób SIGCHLD pomaga efektywnie zarządzać cyklem życia procesów potomnych.