Sobes.tech
Junior — Middle

Môžete vysvetliť, čo znamená signál SIGCHLD v operačnom systéme?

sobes.tech AI

Odpoveď od AI

Signál SIGCHLD v unixových/linuxových operačných systémoch sa odosiela rodičovskému procesu, keď jeden z jeho detských procesov ukončí svoju činnosť alebo zmení stav (napríklad, sa zastaví alebo obnoví).

Rodič môže tento signál spracovať, aby zistil, kedy detský proces skončil, a uvoľnil s ním spojené zdroje (napríklad volaním wait() alebo waitpid()), čím sa zabráni vzniku zombie procesov.

Príklad spracovania SIGCHLD v jazyku 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("Detský proces ukončený\n");
    }
}

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

Týmto spôsobom SIGCHLD pomáha efektívne riadiť životný cyklus detských procesov.