diff --git a/Servers/SystemServer/main.cpp b/Servers/SystemServer/main.cpp index 68974780c6..d713c5995b 100644 --- a/Servers/SystemServer/main.cpp +++ b/Servers/SystemServer/main.cpp @@ -3,13 +3,23 @@ #include #include #include +#include #include #include #include +#include #include //#define SPAWN_MULTIPLE_VIRTUAL_CONSOLES +void sigchld_handler(int) +{ + int status = 0; + pid_t pid = waitpid(-1, &status, WNOHANG); + if (pid) + dbg() << "reaped pid " << pid; +} + void start_process(const String& program, const Vector& arguments, int prio, const char* tty = nullptr) { pid_t pid = 0; @@ -45,7 +55,7 @@ void start_process(const String& program, const Vector& arguments, int p char* progv[256]; progv[0] = const_cast(program.characters()); for (int i = 0; i < arguments.size() && i < 254; i++) - progv[i+1] = const_cast(arguments[i].characters()); + progv[i + 1] = const_cast(arguments[i].characters()); progv[arguments.size() + 1] = nullptr; ret = execv(progv[0], progv); if (ret < 0) { @@ -100,6 +110,8 @@ int main(int, char**) setgid(100); setuid(100); + signal(SIGCHLD, sigchld_handler); + start_process("/bin/LookupServer", {}, lowest_prio); start_process("/bin/WindowServer", {}, highest_prio); start_process("/bin/AudioServer", {}, highest_prio);