Sobes.tech
Junior — Middle

Vai jūs varat izskaidrot, ko nozīmē signāls SIGCHLD operētājsistēmā?

sobes.tech AI

Atbilde no AI

Unix/Linux operētājsistēmās signāls SIGCHLD tiek nosūtīts vecāku procesam, kad viens no tā bērnu procesiem beidz darbu vai maina stāvokli (piemēram, apstājas vai atsāk).

Vecāks var apstrādāt šo signālu, lai uzzinātu, kad bērnu process ir beidzis, un atbrīvotu ar to saistītos resursus (piemēram, izsaucot wait() vai waitpid()), novēršot zombie procesu rašanos.

C valodas SIGCHLD apstrādes piemērs:

#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("Bērnu process ir beidzis\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // bērna process
        _exit(0);
    }
    // vecāku process
    pause(); // gaidīt signālus
    return 0;
}

Šādi SIGCHLD palīdz efektīvi pārvaldīt bērnu procesu dzīves ciklu.