Sobes.tech
Junior — Middle

Meg tudná magyarázni, mit jelent a SIGCHLD jelzés az operációs rendszerben?

sobes.tech MI

Válasz az MI-től

A SIGCHLD jelzés Unix/Linux operációs rendszerekben akkor kerül küldésre a szülő folyamatnak, amikor egyik gyermekfolyamat befejezi a működését vagy állapotot változtat (például megáll vagy újraindul).

A szülő kezelheti ezt a jelet, hogy megtudja, mikor fejeződött be egy gyermekfolyamat, és felszabadíthatja a vele kapcsolatos erőforrásokat (például wait() vagy waitpid() hívásával), elkerülve a zombi folyamatok kialakulását.

Példa a SIGCHLD kezelésére C nyelven:

#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("Gyermekfolyamat befejeződött\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // gyermekfolyamat
        _exit(0);
    }
    // szülőfolyamat
    pause(); // jelek várása
    return 0;
}

Így a SIGCHLD hatékonyan segít a gyermekfolyamatok életciklusának kezelésében.