+Il codice del manipolatore è di lettura immediata; come buona norma di
+programmazione (si ricordi quanto accennato \ref{sec:sys_errno}) si comincia
+(\texttt{\small 13}) con il salvare lo stato corrente di \var{errno}, in modo
+da poterla ripristinare prima del ritorno del manipolatore (\texttt{\small
+ 23}). In questo modo si preserva il valore della variabile visto dal corso
+di esecuzione principale del processo, che sarebbe altrimenti sarebbe
+sovrascritto dal valore restituito nella successiva chiamata di \func{wait}.
+
+Il compito principale del manipolatore è quello di ricevere lo stato di
+terminazione del processo, cosa che viene eseguita nel ciclo in
+(\texttt{\small 15--21}). Il ciclo è necessario a causa di una caratteristica
+fondamentale della gestione dei segnali: abbiamo già accennato come fra la
+generazione di un segnale e l'esecuzione del manipolatore possa passare un
+certo lasso di tempo; dato che questo lasso di tempo può dipendere da parecchi
+fattori esterni, niente ci assicura che il manipolatore venga eseguito prima
+della generazione di altri segnali dello stesso tipo. In questo caso
+normalmente i segnali vengono ``fusi'' insieme ed al processo ne viene
+recapitato soltanto uno.
+
+Questo può essere un caso comune proprio con \texttt{SIGCHLD}, quando molti
+processi figli terminano in rapida successione, e si presenta comunque tutte
+le volte che un segnale viene bloccato. Nel nostro caso se si chiamasse
+\func{waitpid} una sola volta si correrebbe il rischio di non leggere lo stato
+di uscita di tutti i processi effettivamente terminati, i cui segnali sono
+stati riuniti in uno solo. Per questo il ciclo di (\texttt{\small 15--21})
+ripete la lettura (eseguita con il parametro \macro{WNOHANG}, che permette di
+evitare il blocco della funzione) fintanto che essa non restitusce un valore
+nullo, segno che non resta nessun processo concluso di cui si debba ancora
+ricevere lo stato di terminazione.