Sobes.tech
Junior — Middle

Můžete vysvětlit, co znamená signál SIGCHLD v operačním systému?

sobes.tech AI

Odpověď od AI

Signál SIGCHLD v unixových/linuxových operačních systémech je odesílán rodičovskému procesu, když jeden z jeho dětských procesů ukončí svou činnost nebo změní stav (například se zastaví nebo obnoví).

Rodič může tento signál zpracovat, aby se dozvěděl, kdy dětský proces skončil, a uvolnil s ním spojené zdroje (například voláním wait() nebo waitpid()), čímž zabrání vzniku zombie procesů.

Příklad zpracování SIGCHLD v jazyce 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("Dětský proces ukončen\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // dětský proces
        _exit(0);
    }
    // rodičovský proces
    pause(); // čekat na signály
    return 0;
}

Tímto způsobem SIGCHLD pomáhá efektivně řídit životní cyklus dětských procesů.