[LTP] [PATCH 8/8] waitpid08: test stopped children

Stanislav Kholmanskikh stanislav.kholmanskikh@oracle.com
Thu Aug 18 12:12:16 CEST 2016


Hi!

On 08/16/2016 04:03 PM, Cyril Hrubis wrote:
> Hi!
>> The whole purpose of WUNTRACED is to help with handling of stopped
>> children. Therefore, let's expand the scope of testing by making
>> the children stop before we call waitpid() (similarly to waitpid13).
>>
>> Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
>> ---
>>  testcases/kernel/syscalls/waitpid/waitpid08.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/testcases/kernel/syscalls/waitpid/waitpid08.c b/testcases/kernel/syscalls/waitpid/waitpid08.c
>> index e17663f..c743c26 100644
>> --- a/testcases/kernel/syscalls/waitpid/waitpid08.c
>> +++ b/testcases/kernel/syscalls/waitpid/waitpid08.c
>> @@ -43,7 +43,7 @@ static void do_child_1(void)
>>  
>>  		pid = SAFE_FORK();
>>  		if (pid == 0)
>> -			do_exit(0);
>> +			do_exit(1);
>>  
>>  		fork_kid_pid[i] = pid;
> 
> Hmm, shouldn't we send SIGCONT and reap the children at the end of the
> do_child_1() after this change?
> 
> Since if we pass the -i 100 parameter to the test the waitpid_test()
> would continue to fork() children that will stay sigstopped in the
> background even after the test exits since the fork_kid_pid[] is changed
> in each iteration, half of the children has different process group and
> the waitpid_cleanup() is called once at the end of the test. Or do I
> miss something?
> 

No-no, this should not happen, since reap_children() handles stopped
children this way:

for (;;) {
  pid = waitpid();

  if (pid is a pid of a stopped task) {
      kill(pid, SIGCONT);
      continue;
  }

  <...>
}

i.e. it makes all the stopped children continue.

So there should not be any children in 'pgroup' after
reap_children(pgroup) has finished.

This SIGSTOP-related code is added by the previous patch in the series
(waitpid13).

Thanks.




More information about the ltp mailing list