Junior — Middle
Puoi spiegare cosa significa il segnale SIGCHLD nel sistema operativo?
sobes.tech AI
Risposta dell'AI
Il segnale SIGCHLD nei sistemi operativi Unix/Linux viene inviato al processo genitore quando uno dei suoi processi figli termina o cambia stato (ad esempio, si ferma o riprende).
Il processo genitore può gestire questo segnale per sapere quando un processo figlio è terminato e liberare le risorse associate (ad esempio, chiamando wait() o waitpid()), prevenendo la creazione di processi zombie.
Esempio di gestione di 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("Processo figlio terminato\n");
}
}
int main() {
signal(SIGCHLD, sigchld_handler);
if (fork() == 0) {
// processo figlio
_exit(0);
}
// processo genitore
pause(); // attendere segnali
return 0;
}
In questo modo, SIGCHLD aiuta a gestire efficacemente il ciclo di vita dei processi figli.