Sobes.tech
Junior — Middle

Ar galite paaiškinti, ką reiškia SIGCHLD signalas operacinėje sistemoje?

sobes.tech AI

Atsakymas iš AI

Unix/Linux operacinėse sistemose SIGCHLD signalas siunčiamas tėvų procesui, kai vienas iš jo vaikų procesų baigia darbą arba keičia būseną (pavyzdžiui, sustabdomas arba atnaujinamas).

Tėvas gali apdoroti šį signalą, kad sužinotų, kada vaikų procesas baigėsi, ir atlaisvintų su juo susijusius išteklius (pavyzdžiui, iškviesdamas wait() arba waitpid()), taip išvengdamas zombių procesų atsiradimo.

C kalbos SIGCHLD apdorojimo pavyzdys:

#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("Vaiko procesas baigėsi\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // vaiko procesas
        _exit(0);
    }
    // tėvo procesas
    pause(); // laukti signalų
    return 0;
}

Šiuo būdu SIGCHLD padeda efektyviai valdyti vaikų procesų gyvavimo ciklą.