Sobes.tech
Junior — Middle

Pode explicar o que significa o sinal SIGCHLD no sistema operativo?

sobes.tech IA

Resposta da IA

O sinal SIGCHLD nos sistemas operativos Unix/Linux é enviado ao processo pai quando um dos seus processos filhos termina ou muda de estado (por exemplo, é parado ou retomado).

O pai pode tratar este sinal para saber quando um processo filho terminou e libertar os recursos associados (por exemplo, chamando wait() ou waitpid()), evitando a criação de processos zombi.

Exemplo de tratamento de SIGCHLD em 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("Processo filho terminado\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // processo filho
        _exit(0);
    }
    // processo pai
    pause(); // esperar sinais
    return 0;
}

Assim, SIGCHLD ajuda a gerir eficazmente o ciclo de vida dos processos filhos.