Sobes.tech
Junior — Middle

Можете ли објаснити шта значи сигнал SIGCHLD у оперативном систему?

sobes.tech АИ

Одговор од АИ

Sistemima Unix/Linux, signal SIGCHLD se šalje roditeljskom procesu kada jedan od njegovih procesa potomaka završi ili promeni stanje (na primer, zaustavi se ili nastavi).

Roditelj može obraditi ovaj signal da bi saznao kada je proces potomak završio i oslobodio povezane resurse (na primer, pozivanjem wait() ili waitpid()), čime se sprečava pojavljivanje zombija procesa.

Primer obrade SIGCHLD u 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 potomak je završio\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // proces potomak
        _exit(0);
    }
    // roditeljski proces
    pause(); // čekanje na signale
    return 0;
}

Na ovaj način, SIGCHLD pomaže efikasno upravljanje životnim ciklusom procesa potomaka.