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.