From: Vegard Nossum <vegard.nossum-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: Denys Vlasenko <dvlasenk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Quentin Casasnovas
<quentin.casasnovas-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>,
linux-man <linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: ptrace.2: BUGS (missing WIFEXITED notification)
Date: Fri, 12 Aug 2016 16:50:35 +0200 [thread overview]
Message-ID: <57ADE23B.8050905@oracle.com> (raw)
In-Reply-To: <55826A17.8000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 2411 bytes --]
(including context for old thread)
On 06/18/2015 08:49 AM, Michael Kerrisk (man-pages) wrote:
> Vegard (and Quentin): Ping!
>
> On 05/15/2015 02:05 PM, Michael Kerrisk (man-pages) wrote:
>> On 15 May 2015 at 12:12, Vegard Nossum <vegard.nossum-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org> wrote:
>>> On 05/14/2015 06:39 PM, Denys Vlasenko wrote:
>>>> On 05/14/2015 06:28 PM, Quentin Casasnovas wrote:
>>>>> On Thu, May 14, 2015 at 03:52:36PM +0200, Denys Vlasenko wrote:
>>>>>> On 05/14/2015 03:44 PM, Michael Kerrisk (man-pages) wrote:
>>>>>>>
>>>>>>> Hi Denys,
>>>>>>>
>>>>>>> Do you have any thoughts on the below?
>>>>>>
>>>>>> Yes, the poster is right: this part needs fixing, the behavior is
>>>>>> the same on any kind of process termination.
>>>>>>
>>>>>>> On 05/12/2015 04:31 PM, Vegard Nossum wrote:
>>>>>>>>
>>>>>>>> We hit another edge case in the ptrace() interface and after several
>>>>>>>> hours of chasing it down, we found that it was already described in
>>>>>>>> the
>>>>>>>> "BUGS" section:
>>>>>>>>
>>>>>>>> "If a thread group leader is traced and exits by calling _exit(2), a
>>>>>>
>>>>>> I think a possible fix is just to replace "exits by calling _exit(2)"
>>>>>> part
>>>>>> of the above text with "terminates".
>>>>>
>>>>> Should we also add a little paragraph detailing that waitpid() would hang
>>>>> indefinitely if one thread terminates while the others are in
>>>>> ptrace-stop?
>>>>
>>>> It implies this by saying "but the subsequent WIFEXITED notification
>>>> will not be delivered until all other threads exit".
>>>>
>>>> If another thread is in ptrace-stop, it did not exit yet. Therefore,
>>>> WIFEXITED notification to the thread group leader will not be delivered.
>>>> Therefore, waitpid() on it would hang.
>>>
>>> While I agree that the information in the current man page is strictly
>>> speaking sufficient, I personally still think it would be an improvement
>>> to mention it explicitly (i.e. my proposed change #2 in the original
>>> e-mail). Just because I think it's a sort of non-obvious pitfall; out of
>>> hand, you don't expect a call to waitpid() on a process that has exited
>>> to hang. That's just my opinion, though.
>>
>> That sounds okay to me. Would you and/or Quentin be willing to put
>> together a patch to the man page?
>>
Hi,
Apologies for the delay. Here's a new patch, feel free to munge the
wording if you think it can be improved.
Vegard
[-- Attachment #2: 0001-ptrace.2-clarify-what-happens-when-group-leader-exit.patch --]
[-- Type: text/x-patch, Size: 2302 bytes --]
>From 91798cbc674787cf31b66e8cf52557495e659665 Mon Sep 17 00:00:00 2001
From: Vegard Nossum <vegard.nossum-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Date: Fri, 12 Aug 2016 16:31:11 +0200
Subject: [PATCH] ptrace.2: clarify what happens when group leader exits
If both the group leader and other threads in the thread group are
being traced and the group leader exits, there will be no notification
of the group leader's exit to the tracer because it still has
unwaited-for children.
In other words, doing waitpid() on the group leader in this situation
will hang indefinitely.
The old wording makes it seem like this only happens when the group
leader calls _exit(), but in fact it happens for any sort of exit:
_exit, exit_group(), and signal death (as explained in the comment by
Denys Vlasenko).
Cc: Quentin Casasnovas <quentin.casasnovas-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Cc: Denys Vlasenko <dvlasenk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Signed-off-by: Vegard Nossum <vegard.nossum-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
---
man2/ptrace.2 | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git man2/ptrace.2 man2/ptrace.2
index 36d81b9..13bac29 100644
--- man2/ptrace.2
+++ man2/ptrace.2
@@ -2432,8 +2432,7 @@ if that is defined.
Group-stop notifications are sent to the tracer, but not to real parent.
Last confirmed on 2.6.38.6.
.LP
-If a thread group leader is traced and exits by calling
-.BR _exit (2),
+If a thread group leader is traced and exits for any reason,
.\" Note from Denys Vlasenko:
.\" Here "exits" means any kind of death - _exit, exit_group,
.\" signal death. Signal death and exit_group cases are trivial,
@@ -2448,7 +2447,14 @@ a
stop will happen for it (if requested), but the subsequent
.B WIFEXITED
notification will not be delivered until all other threads exit.
-As explained above, if one of other threads calls
+(As a corollary, if the other threads in the thread group are being
+traced, they will not exit until they have been either waited for
+and restarted or detached, thereby blocking the exit notification
+of the group leader to
+.BR wait (2)
+and
+.BR waitpid (2).)
+As explained above, if one of the other threads calls
.BR execve (2),
the death of the thread group leader will
.I never
--
1.9.1
next prev parent reply other threads:[~2016-08-12 14:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-12 14:31 ptrace.2: BUGS (missing WIFEXITED notification) Vegard Nossum
[not found] ` <55520EAC.2010003-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2015-05-14 13:44 ` Michael Kerrisk (man-pages)
[not found] ` <5554A6B0.2090409-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-05-14 13:52 ` Denys Vlasenko
[not found] ` <5554A8A4.7060404-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-14 16:28 ` Quentin Casasnovas
[not found] ` <20150514162807.GA13385-Cuu6V/XUcleLI2c71l+0mdkmqwFzkYv6@public.gmane.org>
2015-05-14 16:39 ` Denys Vlasenko
[not found] ` <5554CFDF.6070602-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-14 16:50 ` Quentin Casasnovas
[not found] ` <20150514165031.GB13385-Cuu6V/XUcleLI2c71l+0mdkmqwFzkYv6@public.gmane.org>
2015-05-14 17:06 ` Denys Vlasenko
[not found] ` <5554D5F8.8050305-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-05-14 17:41 ` Quentin Casasnovas
2015-05-15 10:12 ` Vegard Nossum
[not found] ` <5555C69A.3070509-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2015-05-15 12:05 ` Michael Kerrisk (man-pages)
[not found] ` <CAKgNAkixHtPEdmwuVhic8k2gz8ooLmW1rJ3760oWGUC07K-5hg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-06-18 6:49 ` Michael Kerrisk (man-pages)
[not found] ` <55826A17.8000804-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-08-12 14:50 ` Vegard Nossum [this message]
[not found] ` <57ADE23B.8050905-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2016-08-12 16:15 ` Denys Vlasenko
[not found] ` <864524d3-6a7f-9555-b4a4-eb4816c4da18-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-08-12 18:37 ` Vegard Nossum
[not found] ` <57AE1750.50303-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2016-08-12 19:11 ` Denys Vlasenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57ADE23B.8050905@oracle.com \
--to=vegard.nossum-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
--cc=dvlasenk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=quentin.casasnovas-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.