diff --git a/build/main.c b/build/main.c
index 1a98b39fd017be8f2053e3db1cf88e70fff0ca5f..dd4f03ebf03cc668e49004ef37f13f716b95bd9f 100644
--- a/build/main.c
+++ b/build/main.c
@@ -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);