Commit 92d25637 authored by Li Zhijian's avatar Li Zhijian Committed by Shuah Khan

kselftest: signal all child processes

We have some many cases that will create child process as well, such as
pidfd_wait. Previously, we will signal/kill the parent process when it
is time out, but this signal will not be sent to its child process. In
such case, if child process doesn't terminate itself, ksefltest framework
will hang forever.

Here we group all its child processes so that kill() can signal all of
them in timeout.

Fixed change log: Shuah Khan <skhan@linuxfoundation.org>
Suggested-by: default avataryang xu <xuyang2018.jy@cn.fujitsu.com>
Signed-off-by: default avatarLi Zhijian <lizhijian@cn.fujitsu.com>
Acked-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 40d70d4d
...@@ -877,7 +877,8 @@ static void __timeout_handler(int sig, siginfo_t *info, void *ucontext) ...@@ -877,7 +877,8 @@ static void __timeout_handler(int sig, siginfo_t *info, void *ucontext)
} }
t->timed_out = true; t->timed_out = true;
kill(t->pid, SIGKILL); // signal process group
kill(-(t->pid), SIGKILL);
} }
void __wait_for_test(struct __test_metadata *t) void __wait_for_test(struct __test_metadata *t)
...@@ -987,6 +988,7 @@ void __run_test(struct __fixture_metadata *f, ...@@ -987,6 +988,7 @@ void __run_test(struct __fixture_metadata *f,
ksft_print_msg("ERROR SPAWNING TEST CHILD\n"); ksft_print_msg("ERROR SPAWNING TEST CHILD\n");
t->passed = 0; t->passed = 0;
} else if (t->pid == 0) { } else if (t->pid == 0) {
setpgrp();
t->fn(t, variant); t->fn(t, variant);
if (t->skip) if (t->skip)
_exit(255); _exit(255);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment