This repository was archived by the owner on Nov 4, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
interpreter : handle_sigchld.c
sᴀʟᴠᴀᴛᴏʀᴇ ʙ edited this page Jul 23, 2017
·
2 revisions
void handle_sigchld() {
pid_t pid;
int saved_errno = errno;
//ripeto il ciclo finchè ci sono processi che hanno terminato
while ((pid = waitpid((pid_t) (-1), NULL, WNOHANG)) > 0) {
printf("Il processo id:%d è terminato con successo.\n", pid);
//(pid_t) (-1): attendi qualunque figlio
//&status==NULL: non ci interessa lo stato di terminazione
//WNOHANG: esci se il segnale non era un figlio che ha terminato (restituisce 0)
}
errno = saved_errno; //ripristino errno
}Nella condizione del ciclo while si salva il pid di qualunque figlio abbia terminato (più di uno se terminati contemporaneamente): per ogni pid (sicuramente maggiore di 0) si stampa un messaggio di terminazione opportuno.
Dato che waitpid() sarebbe bloccante fino a che un figlio termini, se venisse richiamata per qualche motivo il processo padre si fermerebbe: per evitare ciò è stato imposto il flag WNOHANG (in caso restituisce 0).
Made with ❤️ by Owanesh and MatteoMauro | MIT ©