diff --git a/trunk/src/sj3serv/main.c b/trunk/src/sj3serv/main.c index 2787d1b..de3c447 100644 --- a/trunk/src/sj3serv/main.c +++ b/trunk/src/sj3serv/main.c @@ -39,7 +39,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -88,6 +90,16 @@ terminate_handler(int sig) server_terminate(); } +sigchild_handler(int sig) +{ + int save_errno = errno; + int status; + + while (waitpid(-1, &status, WNOHANG) > 0) + ; + errno = save_errno; +} + void server_terminate() { @@ -104,6 +116,7 @@ set_signals() signal(SIGINT, (void (*)(int))terminate_handler); signal(SIGQUIT, (void (*)(int))signal_handler); + signal(SIGCHLD, (void (*)(int))sigchild_handler); signal(SIGTERM, (void (*)(int))terminate_handler); }