Sobes.tech
Junior — Middle

Können Sie erklären, was das Signal SIGCHLD im Betriebssystem bedeutet?

sobes.tech KI

Antwort von AI

Das Signal SIGCHLD in Unix/Linux-Betriebssystemen wird an den Elternprozess gesendet, wenn einer seiner Kindprozesse beendet wird oder seinen Zustand ändert (z.B. gestoppt oder wieder aufgenommen wird).

Der Elternprozess kann dieses Signal behandeln, um zu erfahren, wann ein Kindprozess beendet wurde, und die damit verbundenen Ressourcen freizugeben (z.B. durch Aufruf von wait() oder waitpid()), um das Entstehen von Zombie-Prozessen zu verhindern.

Beispiel für die Behandlung von SIGCHLD in 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("Kindprozess beendet\n");
    }
}

int main() {
    signal(SIGCHLD, sigchld_handler);
    if (fork() == 0) {
        // Kindprozess
        _exit(0);
    }
    // Elternprozess
    pause(); // auf Signale warten
    return 0;
}

Auf diese Weise hilft SIGCHLD, den Lebenszyklus der Kindprozesse effizient zu verwalten.