BUG: Do not send both SIGSTOP and SIGKILL when killing a process. The SIGSTOP seems to be able to block the SIGKILL occasionally. Also the SIGKILL is sufficient since the process table entry will still exist until it is reaped with waitpid.

This commit is contained in:
Brad King 2007-05-16 13:10:45 -04:00
parent b384218ec1
commit 01c7db07c3
1 changed files with 7 additions and 5 deletions

View File

@ -2312,8 +2312,13 @@ static void kwsysProcessKill(pid_t process_id)
DIR* procdir; DIR* procdir;
#endif #endif
/* Suspend the process to be sure it will not create more children. */ /* Kill the process now to make sure it does not create more
kill(process_id, SIGSTOP); 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. */ /* Kill all children if we can find them. */
#if defined(__linux__) || defined(__CYGWIN__) #if defined(__linux__) || defined(__CYGWIN__)
@ -2401,9 +2406,6 @@ static void kwsysProcessKill(pid_t process_id)
} }
#endif #endif
} }
/* Kill the process. */
kill(process_id, SIGKILL);
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/