Reaping zombies properly

This commit is contained in:
Sergey Lyubka 2013-10-07 17:29:07 +01:00
parent 1777cc6e86
commit 3adaf8dba9

View File

@ -78,11 +78,15 @@ static struct mg_context *ctx; // Set by start_mongoose()
#endif /* !CONFIG_FILE */
static void WINCDECL signal_handler(int sig_num) {
// Reinstantiate signal handler
signal(sig_num, signal_handler);
#if !defined(_WIN32)
// Do not do the trick with ignoring SIGCHLD, cause not all OSes (e.g. QNX)
// reap zombies if SIGCHLD is ignored. On QNX, for example, waitpid()
// fails if SIGCHLD is ignored, making system() non-functional.
if (sig_num == SIGCHLD) {
printf("dssfdsfds\n");
do {} while (waitpid(-1, &sig_num, WNOHANG) > 0);
} else
#endif
@ -383,6 +387,9 @@ static void start_mongoose(int argc, char *argv[]) {
// Setup signal handler: quit on Ctrl-C
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
#ifndef _WIN32
signal(SIGCHLD, signal_handler);
#endif
// Start Mongoose
ctx = mg_start((const char **) options, event_handler, NULL);