summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/kwsys/ProcessUNIX.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/Source/kwsys/ProcessUNIX.c b/Source/kwsys/ProcessUNIX.c
index 9917e507a3..bc24fc6b08 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);
}
/*--------------------------------------------------------------------------*/