diff --git a/Source/kwsys/ProcessUNIX.c b/Source/kwsys/ProcessUNIX.c index 9917e507a..bc24fc6b0 100644 --- a/Source/kwsys/ProcessUNIX.c +++ b/Source/kwsys/ProcessUNIX.c @@ -2312,8 +2312,13 @@ static void kwsysProcessKill(pid_t process_id) DIR* procdir; #endif - /* Suspend the process to be sure it will not create more children. */ - kill(process_id, SIGSTOP); + /* Kill the process now to make sure it does not create more + children. Do not reap it yet so we can identify its existing + children. There is a small race condition here. If the child + forks after we begin looking for children below but before it + receives this kill signal we might miss a child. Also we might + not be able to catch up to a fork bomb. */ + kill(process_id, SIGKILL); /* Kill all children if we can find them. */ #if defined(__linux__) || defined(__CYGWIN__) @@ -2401,9 +2406,6 @@ static void kwsysProcessKill(pid_t process_id) } #endif } - - /* Kill the process. */ - kill(process_id, SIGKILL); } /*--------------------------------------------------------------------------*/