[lkml]   [2019]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH] ptrace.2: Improve clarity for multi-threaded tracers
Until now, the man page said:

Attachment and subsequent commands are per thread:
in a multi‐ threaded process, every thread can be individually attached to a
(potentially different) tracer, or left not attached and thus not debugged.
Therefore, "tracee" always means "(one) thread", never "a (possibly
multithreaded) process".

While the first sentence "Attachment ... [is] per thread" might be interpreted
as holding for both tracer and tracee, the rest talks only about the
multi-threadedness of the *tracee*, leaving some uncertainty in the reader on
whether the tracer may issue `ptrace()` from different threads.

This patch adds more explicitness, removing any doubt.

Relevant resources:

* LKML thread
"ptrace() with multithreaded tracer"
where I asked about this behaviour, in case anybody disagrees with my
where the previous ambiguity of the man page confused some users, and where
and example program is given that confirms the behaviour I mention in this
* A program of mine, in which I have independently confirmed that using
`ptrace()` from a thread that's not the tracer thread (a sibling thread in
the process is the tracer instead) results in `ESRCH`
where the comment on `ptrace_check_attach()` talks about `%current`, which
is a thread

Signed-off-by: Niklas Hambüchen <>
man2/ptrace.2 | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/man2/ptrace.2 b/man2/ptrace.2
index 3b6b6ea84..4058abe94 100644
--- a/man2/ptrace.2
+++ b/man2/ptrace.2
@@ -122,12 +122,18 @@ It is primarily used to implement breakpoint debugging and system
call tracing.
A tracee first needs to be attached to the tracer.
-Attachment and subsequent commands are per thread:
-in a multithreaded process,
+Attachment and subsequent commands are per thread,
+on both the tracer and tracee side.
+Issuing a tracing command from a thread that is not the tracer of the given
+.I pid
+will result in an
+In a multithreaded process to be traced,
every thread can be individually attached to a
(potentially different) tracer,
or left not attached and thus not debugged.
-Therefore, "tracee" always means "(one) thread",
+Therefore, "tracer" or "tracee" always mean "(one) thread",
never "a (possibly multithreaded) process".
Ptrace commands are always sent to
a specific tracee using a call of the form
@@ -2259,7 +2265,7 @@ or (on kernels before 2.6.26) be
The specified process does not exist, or is not currently being traced
-by the caller, or is not stopped
+by the calling thread, or is not stopped
(for requests that require a stopped tracee).
SVr4, 4.3BSD.
 \ /
  Last update: 2019-02-17 17:35    [W:0.097 / U:0.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site