Correzioni varie, imprecisioni nella gestione dei segnali, maggiori dettagli
[gapil.git] / listati / hand_sigchild.c
diff --git a/listati/hand_sigchild.c b/listati/hand_sigchild.c
new file mode 100644 (file)
index 0000000..2ae8cc6
--- /dev/null
@@ -0,0 +1,20 @@
+void HandSigCHLD(int sig)
+{
+    int errno_save;
+    int status;
+    pid_t pid;
+    /* save errno current value */
+    errno_save = errno;
+    /* loop until no */
+    do {
+        errno = 0;
+        pid = waitpid(WAIT_ANY, &status, WNOHANG);
+        if (pid > 0) {
+            debug("child %d terminated with status %x\n", pid, status);
+        }
+    } while ((pid > 0) && (errno == EINTR));
+    /* restore errno value */
+    errno = errno_save;
+    /* return */
+    return;
+}