Junior — Middle
Kunt u uitleggen wat het signaal SIGCHLD betekent in het besturingssysteem?
sobes.tech AI
Antwoord van AI
Het SIGCHLD-signaal in Unix/Linux-besturingssystemen wordt naar het ouderproces gestuurd wanneer een van zijn kindprocessen eindigt of van status verandert (bijvoorbeeld wordt gestopt of hervat).
De ouder kan dit signaal afhandelen om te weten wanneer een kindproces is voltooid en de eraan gekoppelde bronnen vrij te maken (bijvoorbeeld door wait() of waitpid() aan te roepen), waardoor het ontstaan van zombie-processen wordt voorkomen.
Voorbeeld van SIGCHLD-afhandeling 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("Kindproces beëindigd\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// kindproces
_exit(0);
}
// ouderproces
pause(); // wachten op signalen
return 0;
}
Op deze manier helpt SIGCHLD om de levenscyclus van kindprocessen efficiënt te beheren.