Sobes.tech
Junior — Middle

Puoi spiegare cosa significa il segnale SIGCHLD nel sistema operativo?

sobes.tech AI

Risposta dell'AI

Il segnale SIGCHLD nei sistemi operativi Unix/Linux viene inviato al processo genitore quando uno dei suoi processi figli termina o cambia stato (ad esempio, si ferma o riprende).

Il processo genitore può gestire questo segnale per sapere quando un processo figlio è terminato e liberare le risorse associate (ad esempio, chiamando wait() o waitpid()), prevenendo la creazione di processi zombie.

Esempio di gestione di SIGCHLD in 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("Processo figlio terminato\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // processo figlio
        _exit(0);
    }
    // processo genitore
    pause(); // attendere segnali
    return 0;
}

In questo modo, SIGCHLD aiuta a gestire efficacemente il ciclo di vita dei processi figli.