mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 22:30:07 +00:00
test-skeleton: Kill any child process's offspring
This makes sure any subprocesses created by the program being tested get killed as well if their parent times out. Otherwise if they are really stuck, they may remain there running forever after the test case and then the whole test suite has completed, until killed by hand. * test-skeleton.c (signal_handler): Kill the whole process group before killing the child individually. (main): Report any failure on `setpgid'.
This commit is contained in:
parent
46f1d8a6b5
commit
d7a05d0728
@ -1,3 +1,10 @@
|
||||
2014-06-30 Maciej W. Rozycki <macro@codesourcery.com>
|
||||
Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* test-skeleton.c (signal_handler): Kill the whole process group
|
||||
before killing the child individually.
|
||||
(main): Report any failure on `setpgid'.
|
||||
|
||||
2014-06-30 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/arm/nptl/tls.h: Rename the multiple inclusion guard
|
||||
|
@ -17,6 +17,7 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
@ -138,7 +139,10 @@ signal_handler (int sig __attribute__ ((unused)))
|
||||
int killed;
|
||||
int status;
|
||||
|
||||
/* Send signal. */
|
||||
assert (pid > 1);
|
||||
/* Kill the whole process group. */
|
||||
kill (-pid, SIGKILL);
|
||||
/* In case setpgid failed in the child, kill it individually too. */
|
||||
kill (pid, SIGKILL);
|
||||
|
||||
/* Wait for it to terminate. */
|
||||
@ -342,7 +346,8 @@ main (int argc, char *argv[])
|
||||
|
||||
/* We put the test process in its own pgrp so that if it bogusly
|
||||
generates any job control signals, they won't hit the whole build. */
|
||||
setpgid (0, 0);
|
||||
if (setpgid (0, 0) != 0)
|
||||
printf ("Failed to set the process group ID: %m\n");
|
||||
|
||||
/* Execute the test function and exit with the return value. */
|
||||
exit (TEST_FUNCTION);
|
||||
|
Loading…
Reference in New Issue
Block a user