diff --git a/ProcessUNIX.c b/ProcessUNIX.c
index 4e4c8d0aa14e903de74d329736cfd4539330d915..83669133b51553f7eca809852b7292e3e67084df 100644
--- a/ProcessUNIX.c
+++ b/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);
 }
 
 /*--------------------------------------------------------------------------*/