Sobes.tech
Junior — Middle

Puteți explica ce înseamnă semnalul SIGCHLD în sistemul de operare?

sobes.tech AI

Răspuns de la AI

Semnalul SIGCHLD în sistemele de operare Unix/Linux este trimis procesului părinte atunci când unul dintre procesele sale fiice se termină sau își schimbă starea (de exemplu, se oprește sau se reia).

Procesul părinte poate trata acest semnal pentru a afla când un proces fiu s-a încheiat și pentru a elibera resursele asociate (de exemplu, apelând wait() sau waitpid()), prevenind astfel apariția proceselor zombie.

Exemplu de tratare a SIGCHLD în 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("Proces fiu terminat\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // proces fiu
        _exit(0);
    }
    // proces părinte
    pause(); // așteaptă semnale
    return 0;
}

Astfel, SIGCHLD ajută la gestionarea eficientă a ciclului de viață al proceselor fiice.