diff --git a/cmdline/main.c b/cmdline/main.c index 8d1dfc33..b90620e6 100644 --- a/cmdline/main.c +++ b/cmdline/main.c @@ -387,6 +387,9 @@ int main(int argc, char* argv[]) if (pid == 0) { /* child process */ + /* isolate child in its own process group to prevent double signal delivery from terminal */ + setpgid(0, 0); + /* restore default signal handlers */ signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); @@ -409,6 +412,9 @@ int main(int argc, char* argv[]) /* parent process */ int status; + /* set child process group in parent to prevent race condition */ + setpgid(pid, pid); + /* store child PID so signal handler can forward signals */ child_pid = pid;