|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/*--------------------------------------------------------------------------*/
|