xref: /minix3/minix/usr.bin/trace/trace.1 (revision 10a44c0ee2297b10de47c333d88880b5ccc8208e)
1521fa314SDavid van Moolenbroek.Dd November 2, 2014
2521fa314SDavid van Moolenbroek.Dt TRACE 1
3521fa314SDavid van Moolenbroek.Os
4521fa314SDavid van Moolenbroek.Sh NAME
5521fa314SDavid van Moolenbroek.Nm trace
6521fa314SDavid van Moolenbroek.Nd print process system calls and signals
7521fa314SDavid van Moolenbroek.Sh SYNOPSIS
8521fa314SDavid van Moolenbroek.Nm
9*10a44c0eSDavid van Moolenbroek.Op Fl fgNstVv
10521fa314SDavid van Moolenbroek.Op Fl o Ar file
11521fa314SDavid van Moolenbroek.Op Fl p Ar pid
12521fa314SDavid van Moolenbroek.Op Ar command
13521fa314SDavid van Moolenbroek.Sh DESCRIPTION
14521fa314SDavid van MoolenbroekThe
15521fa314SDavid van Moolenbroek.Nm
16521fa314SDavid van Moolenbroekutility shows one or more processes to be traced.
17521fa314SDavid van MoolenbroekFor each traced process,
18521fa314SDavid van Moolenbroek.Nm
19521fa314SDavid van Moolenbroekprints the system calls the process makes and the signals
20521fa314SDavid van Moolenbroekit receives.
21521fa314SDavid van MoolenbroekThe user can let
22521fa314SDavid van Moolenbroek.Nm
23521fa314SDavid van Moolenbroekstart a
24521fa314SDavid van Moolenbroek.Ar command
25521fa314SDavid van Moolenbroekto be traced, and/or attach to one or more existing processes.
26521fa314SDavid van Moolenbroek.Pp
27521fa314SDavid van MoolenbroekThe utility will run until no processes are left to trace, or until the user
28521fa314SDavid van Moolenbroekpresses the interrupt key (typically Ctrl-C).
29521fa314SDavid van MoolenbroekPressing this key once will cause all attached processes to be detached, with
30521fa314SDavid van Moolenbroekthe hope that the command that was started will also terminate cleanly from the
31521fa314SDavid van Moolenbroekinterruption.
32521fa314SDavid van MoolenbroekPressing the interrupt key once more kills the command that was started.
33521fa314SDavid van Moolenbroek.Pp
34521fa314SDavid van MoolenbroekThe following options are available:
35521fa314SDavid van Moolenbroek.Bl -tag -width XoXfileXX
36521fa314SDavid van Moolenbroek.It Fl f
37521fa314SDavid van MoolenbroekFollow forks.
38521fa314SDavid van MoolenbroekAttach automatically to forked child processes.
39521fa314SDavid van MoolenbroekChild processes of the started command will be treated as attached processes,
40521fa314SDavid van Moolenbroekin that upon Ctrl-C presses they will be detached rather than killed.
41521fa314SDavid van Moolenbroek.It Fl g
42521fa314SDavid van MoolenbroekEnable call grouping.
43521fa314SDavid van MoolenbroekWith this option, the tracing engine tries to reduce noise from call preemption
44521fa314SDavid van Moolenbroekby first polling the process that was active last.
45521fa314SDavid van MoolenbroekThis should reduce in cleaner output, but may also cause a single process to be
46521fa314SDavid van Moolenbroekscheduled repeatedly and thus cause starvation.
47521fa314SDavid van Moolenbroek.It Fl N
48521fa314SDavid van MoolenbroekPrint all names.
49521fa314SDavid van MoolenbroekBy default, the most structure fields are printed with their name.
50521fa314SDavid van MoolenbroekThis option enables printing of all available names, which also includes
51521fa314SDavid van Moolenbroeksystem call parameter names.
52521fa314SDavid van MoolenbroekThis flag may be useful to figure out the meaning of a parameter, and for
53521fa314SDavid van Moolenbroekautomatic processing of the output.
54521fa314SDavid van Moolenbroek.It Fl s
55521fa314SDavid van MoolenbroekPrint stack traces.
56521fa314SDavid van MoolenbroekEach system call, and each signal arriving outside a system call, will be
57521fa314SDavid van Moolenbroekpreceded by a line showing the process's current stack trace.
58521fa314SDavid van MoolenbroekFor signals blocked by the target process, the stack trace may not be
59521fa314SDavid van Moolenbroekmeaningful.
60521fa314SDavid van MoolenbroekStack traces may not be supported on all platforms.
61*10a44c0eSDavid van Moolenbroek.It Fl t
62*10a44c0eSDavid van MoolenbroekPrint timestamps.
63*10a44c0eSDavid van MoolenbroekBy default, no timestamps are printed.
64*10a44c0eSDavid van MoolenbroekIf this flag is given once, each line will be prefixed by the current time.
65*10a44c0eSDavid van MoolenbroekIf this flag is given twice, the time will also include microseconds.
66*10a44c0eSDavid van MoolenbroekThe printed timestamp corresponds to the time at which printing of the rest of
67*10a44c0eSDavid van Moolenbroekthe line was initiated, which in the case of call resumption may not be the
68*10a44c0eSDavid van Moolenbroeksame as the time that the system call was initiated.
69521fa314SDavid van Moolenbroek.It Fl V
70521fa314SDavid van MoolenbroekPrint values only.
71521fa314SDavid van MoolenbroekIf this flag is given once, numerical values will be printed instead of
72521fa314SDavid van Moolenbroekstring constants.
73521fa314SDavid van MoolenbroekIn addition, if it is given twice, the addresses of structures will be printed
74521fa314SDavid van Moolenbroekinstead of their contents.
75521fa314SDavid van Moolenbroek.It Fl v
76521fa314SDavid van MoolenbroekIncrease verbosity.
77521fa314SDavid van MoolenbroekBy default, the output will be terse, in that not all structure fields are
78521fa314SDavid van Moolenbroekshown, and strings and arrays are not always printed in full.
79521fa314SDavid van MoolenbroekIf this flag is provided once, more and longer output will be printed.
80521fa314SDavid van MoolenbroekIf it is provided twice, the tracer will print as much as possible.
81521fa314SDavid van Moolenbroek.It Fl o Ar file
82521fa314SDavid van MoolenbroekRedirect output.
83521fa314SDavid van MoolenbroekBy default, the output is sent to standard error.
84521fa314SDavid van MoolenbroekWith this option, the output is written to the given
85521fa314SDavid van Moolenbroek.Ar file
86521fa314SDavid van Moolenbroekinstead.
87521fa314SDavid van Moolenbroek.It Fl p Ar pid
88521fa314SDavid van MoolenbroekAttach to a process.
89521fa314SDavid van MoolenbroekThis option makes
90521fa314SDavid van Moolenbroek.Nm
91521fa314SDavid van Moolenbroekattach to an existing process with process ID
92521fa314SDavid van Moolenbroek.Ar pid .
93521fa314SDavid van MoolenbroekThis option may be used multiple times.
94521fa314SDavid van MoolenbroekWhen attaching to one or more processes this way, starting a command becomes
95521fa314SDavid van Moolenbroekoptional.
96521fa314SDavid van Moolenbroek.El
97521fa314SDavid van Moolenbroek.Pp
98521fa314SDavid van MoolenbroekIf the user presses the information key (typically Ctrl-T), the list of traced
99521fa314SDavid van Moolenbroekprocess along with their current status will be printed.
100521fa314SDavid van Moolenbroek.Sh OUTPUT FORMAT
101521fa314SDavid van MoolenbroekSystem calls are printed with the following general output format:
102521fa314SDavid van Moolenbroek.Bd -literal -offset indent
103521fa314SDavid van Moolenbroek.Sy name Ns ( Ns Sy parameters Ns ) = Sy result
104521fa314SDavid van Moolenbroek.Ed
105521fa314SDavid van Moolenbroek.Pp
106521fa314SDavid van MoolenbroekOther informational lines may be printed about the status of the process.
107521fa314SDavid van MoolenbroekThese lines typically start with an uppercase letter, while system calls
108521fa314SDavid van Moolenbroekalways start with a lowercase letter or an underscore.
109521fa314SDavid van MoolenbroekThe following example shows the tracer output for a program that prints its
110521fa314SDavid van Moolenbroekown user ID:
111521fa314SDavid van Moolenbroek.Bd -literal -offset indent
112521fa314SDavid van MoolenbroekTracing printuid (pid 12685)
113521fa314SDavid van Moolenbroekminix_getinfo() = 0
114521fa314SDavid van Moolenbroekgetuid() = 0 (euid=1)
115521fa314SDavid van Moolenbroekwrite(1, "My uid: 0\en", 10) = 10
116521fa314SDavid van Moolenbroekexit(0)
117521fa314SDavid van MoolenbroekProcess exited normally with code 0
118521fa314SDavid van Moolenbroek.Ed
119521fa314SDavid van Moolenbroek.Pp
120521fa314SDavid van MoolenbroekThe first and last lines of the output provide status information about the
121521fa314SDavid van Moolenbroektraced process.
122521fa314SDavid van MoolenbroekSome calls return multiple results; extended results are printed in parentheses
123521fa314SDavid van Moolenbroekafter the primary call result, typically in
124521fa314SDavid van Moolenbroek.Va name Ns = Ns Va value
125521fa314SDavid van Moolenbroekformat for clarity.
126521fa314SDavid van MoolenbroekSystem calls that do not return on success, such as
127521fa314SDavid van Moolenbroek.Fn exit ,
128521fa314SDavid van Moolenbroekare printed without the equals sign and result, unless they fail.
129521fa314SDavid van MoolenbroekSystem call failure is printed according to POSIX conventions; that is, the
130521fa314SDavid van Moolenbroekcall is assumed to return -1 with the value of
131521fa314SDavid van Moolenbroek.Va errno
132521fa314SDavid van Moolenbroekprinted in square brackets after it:
133521fa314SDavid van Moolenbroek.Bd -literal -offset indent
134521fa314SDavid van Moolenbroeksetuid(0) = -1 [EPERM]
135521fa314SDavid van Moolenbroek.Ed
136521fa314SDavid van Moolenbroek.Pp
137521fa314SDavid van MoolenbroekIf a system call ends up in an IPC-level failure, the -1 value will be preceded
138521fa314SDavid van Moolenbroekby an
139521fa314SDavid van Moolenbroek.Dq Li <ipc>
140521fa314SDavid van Moolenbroekstring.
141521fa314SDavid van MoolenbroekHowever, this string will be omitted if the system call itself is printed at
142521fa314SDavid van Moolenbroekthe IPC level (that is, as an
143521fa314SDavid van Moolenbroek.Fn ipc_sendrec
144521fa314SDavid van Moolenbroekcall), generally because
145521fa314SDavid van Moolenbroek.Nm
146521fa314SDavid van Moolenbroekhas no handler to print the actual system call.
147521fa314SDavid van Moolenbroek.Pp
148521fa314SDavid van MoolenbroekSignals are printed as they arrive at the traced process, using two asterisks
149521fa314SDavid van Moolenbroekon both side of the signal name.
150521fa314SDavid van MoolenbroekSignals may arrive both during and outside the execution of a system call:
151521fa314SDavid van Moolenbroek.Bd -literal -offset indent
152521fa314SDavid van Moolenbroekread(3, ** SIGUSR1 ** &0xeffff867, 4096) = -1 [EINTR]
153521fa314SDavid van Moolenbroek** SIGUSR2 **
154521fa314SDavid van Moolenbroekgetpid() = 5278 (ppid=5277)
155521fa314SDavid van Moolenbroekkill(5278, SIGTERM) = ** SIGTERM ** <..>
156521fa314SDavid van MoolenbroekProcess terminated from signal SIGTERM
157521fa314SDavid van Moolenbroek.Ed
158521fa314SDavid van Moolenbroek.Pp
159521fa314SDavid van MoolenbroekMultiple signals may be printed consecutively.
160521fa314SDavid van MoolenbroekThe above example illustrates a few other important aspects of output
161521fa314SDavid van Moolenbroekformatting.
162521fa314SDavid van MoolenbroekSome call parameters may be printed only after the system call returns, in
163521fa314SDavid van Moolenbroekorder to show their actual value.
164521fa314SDavid van MoolenbroekFor the
165521fa314SDavid van Moolenbroek.Fn read
166521fa314SDavid van Moolenbroekcall, this would be the bytes that were read.
167521fa314SDavid van MoolenbroekUpon failure, no bytes were read, so the buffer pointer is printed instead.
168521fa314SDavid van MoolenbroekFinally, if a call that is expected to return (here,
169521fa314SDavid van Moolenbroek.Fn kill )
170521fa314SDavid van Moolenbroekdoes not return before the process terminates, the line ends with a
171521fa314SDavid van Moolenbroek.Dq Li <..>
172521fa314SDavid van Moolenbroekmarker.
173521fa314SDavid van MoolenbroekThis is an instance of call preemption; more about that later.
174521fa314SDavid van Moolenbroek.Pp
175521fa314SDavid van MoolenbroekPointers are printed with a
176521fa314SDavid van Moolenbroek.Sq Li &
177521fa314SDavid van Moolenbroekprefix, except for NULL, which is printed using its own name.
178521fa314SDavid van MoolenbroekIn general, named constants are used instead of numerical constants wherever
179521fa314SDavid van Moolenbroekthat makes sense.
180521fa314SDavid van MoolenbroekFor pointers of which the address is not available, typically because its
181521fa314SDavid van Moolenbroekcontents are passed by value,
182521fa314SDavid van Moolenbroek.Dq Li &..
183521fa314SDavid van Moolenbroekis shown instead.
184521fa314SDavid van Moolenbroek.Pp
185521fa314SDavid van MoolenbroekData buffers are printed as double-quoted strings, using C-style character
186521fa314SDavid van Moolenbroekescaping for nontextual bytes.
187521fa314SDavid van MoolenbroekIf either the verbosity level or a copy error prevents the whole data buffer
188521fa314SDavid van Moolenbroekfrom being printed, two dots will be printed after the closing quote.
189521fa314SDavid van MoolenbroekThe same is done when printing a string buffer which does not have a null
190521fa314SDavid van Moolenbroektermination byte within its range.
191521fa314SDavid van MoolenbroekPath names are shown in full regardless of the verbosity level.
192521fa314SDavid van Moolenbroek.Pp
193521fa314SDavid van MoolenbroekStructures are printed as a set of structure fields enclosed in curly brackets.
194521fa314SDavid van MoolenbroekThe
195521fa314SDavid van Moolenbroek.Va name Ns = Ns Va value
196521fa314SDavid van Moolenbroekformat is used, unless printing names for that structure type would introduce
197521fa314SDavid van Moolenbroektoo much noise and the
198521fa314SDavid van Moolenbroek.Dq print all names
199521fa314SDavid van Moolenbroekoption is not given.
200521fa314SDavid van MoolenbroekFor many structures, by default only a subset of their fields are printed.
201521fa314SDavid van MoolenbroekIn this case, a
202521fa314SDavid van Moolenbroek.Dq Li ..
203521fa314SDavid van Moolenbroekentry is added at the end.
204521fa314SDavid van MoolenbroekIn some cases, an attempt is made to print only the most useful fields:
205521fa314SDavid van Moolenbroek.Bd -literal -offset indent
206521fa314SDavid van Moolenbroekstat("/etc/motd", {st_mode=S_IFREG|0755, st_size=747, ..}) = 0
207521fa314SDavid van Moolenbroekstat("/dev/tty", {st_mode=S_IFCHR|0666, st_rdev=<5,0>, ..}) = 0
208521fa314SDavid van Moolenbroek.Ed
209521fa314SDavid van Moolenbroek.Pp
210521fa314SDavid van MoolenbroekAs shown in the above example, flag fields are printed as a combination of
211521fa314SDavid van Moolenbroeknamed constants, separated by a
212521fa314SDavid van Moolenbroek.Sq Li |
213521fa314SDavid van Moolenbroekpipe symbol.
214521fa314SDavid van MoolenbroekAny leftover numerical bits are printed at the end.
215521fa314SDavid van MoolenbroekThe example also shows the format in which major/minor pairs are printed for
216521fa314SDavid van Moolenbroekdevice numbers.
217521fa314SDavid van MoolenbroekThis is a custom format; there are a few other custom formats throughout the
218521fa314SDavid van Moolenbroek.Nm
219521fa314SDavid van Moolenbroekoutput which are supposed to be sufficiently self-explanatory (and rare).
220521fa314SDavid van Moolenbroek.Pp
221521fa314SDavid van MoolenbroekArrays are printed using square brackets.
222521fa314SDavid van Moolenbroek.Bd -literal -offset indent
223521fa314SDavid van Moolenbroekpipe2([3, 4], 0) = 0
224521fa314SDavid van Moolenbroekgetdents(3, [..(45)], 4096) = 1824
225521fa314SDavid van Moolenbroekgetdents(3, [{d_name="."}, ..(+44)], 4096) = 1824
226521fa314SDavid van Moolenbroekgetdents(3, [], 4096) = 0
227521fa314SDavid van Moolenbroek.Ed
228521fa314SDavid van Moolenbroek.Pp
229521fa314SDavid van MoolenbroekIf the array contents are not printed as per the settings for the verbosity
230521fa314SDavid van Moolenbroeklevel, a single pseudo-element shows how many actual elements were in the array
231521fa314SDavid van Moolenbroek(the second line in the example).
232521fa314SDavid van MoolenbroekIf the number of printed elements is limited, a final pseudo-element shows how
233521fa314SDavid van Moolenbroekmany additional elements were not printed (the third line in the example).
234521fa314SDavid van MoolenbroekIf a copy error occurs while part of the array has been printed already, a
235521fa314SDavid van Moolenbroeklast
236521fa314SDavid van Moolenbroek.Dq Li ..(?)
237521fa314SDavid van Moolenbroekpseudo-element is printed; for immediate failure, the array's pointer is shown.
238521fa314SDavid van MoolenbroekEmpty arrays will be printed as
239521fa314SDavid van Moolenbroek.Dq Li [] .
240521fa314SDavid van Moolenbroek.Pp
241521fa314SDavid van MoolenbroekBit sets are printed as arrays except with just a space and no comma as
242521fa314SDavid van Moolenbroekbit separator, closely following the output format of
243521fa314SDavid van Moolenbroek.Nm Ns 's
244521fa314SDavid van Moolenbroekoriginal inspiration
245521fa314SDavid van Moolenbroek.Sy strace .
246521fa314SDavid van MoolenbroekFor signal sets in particular, an inverted bit set may be shown, thus printing
247521fa314SDavid van Moolenbroekonly the bits which are not set; such sets are prefixed with a
248521fa314SDavid van Moolenbroek.Sq Li ~
249521fa314SDavid van Moolenbroekto the opening bracket:
250521fa314SDavid van Moolenbroek.Bd -literal -offset indent
251521fa314SDavid van Moolenbroeksigprocmask(SIG_SETMASK, ~[USR1 USR2], []) = 0
252521fa314SDavid van Moolenbroek.Ed
253521fa314SDavid van Moolenbroek.Pp
254521fa314SDavid van MoolenbroekNote how the
255521fa314SDavid van Moolenbroek.Dq Li SIG
256521fa314SDavid van Moolenbroekprefixes are omitted for brevity in this case.
257521fa314SDavid van Moolenbroek.Pp
258521fa314SDavid van MoolenbroekWhen multiple processes are traced at once, each line will have a prefix that
259521fa314SDavid van Moolenbroekshows the PID of the corresponding process.
260521fa314SDavid van MoolenbroekWhen the number of processes drops to one again, one more line is prefixed with
261521fa314SDavid van Moolenbroekthe PID of the remaining process, but using a
262521fa314SDavid van Moolenbroek.Sq Li '
263521fa314SDavid van Moolenbroekinstead of a
264521fa314SDavid van Moolenbroek.Sq Li |
265521fa314SDavid van Moolenbroeksymbol:
266521fa314SDavid van Moolenbroek.Bd -literal -offset indent
267521fa314SDavid van Moolenbroekfork() = 25813
268521fa314SDavid van Moolenbroek25813| Tracing test*F (pid 25813)
269521fa314SDavid van Moolenbroek25813| fork() = 0
270521fa314SDavid van Moolenbroek25812| waitpid(-1, &.., WNOHANG) = 0
271521fa314SDavid van Moolenbroek25813| exit(1)
272521fa314SDavid van Moolenbroek25813| Process exited normally with code 1
273521fa314SDavid van Moolenbroek25812' waitpid(-1, W_EXITED(1), WNOHANG) = 25813
274521fa314SDavid van Moolenbroekexit(0)
275521fa314SDavid van MoolenbroekProcess exited normally with code 0
276521fa314SDavid van Moolenbroek.Ed
277521fa314SDavid van Moolenbroek.Pp
278521fa314SDavid van MoolenbroekIf a process is preempted while making a system call, the system call will
279521fa314SDavid van Moolenbroekbe shown as suspended with the
280521fa314SDavid van Moolenbroek.Dq Li <..>
281521fa314SDavid van Moolenbroeksuffix.
282521fa314SDavid van MoolenbroekLater, when the system call is resumed, the output so far will be repeated,
283521fa314SDavid van Moolenbroekeither in full or (due to memory limitations) with
284521fa314SDavid van Moolenbroek.Dq Li <..>
285521fa314SDavid van Moolenbroekin its body, before the remaining part of the system call is printed.
286521fa314SDavid van MoolenbroekThis time, the line will have a
287521fa314SDavid van Moolenbroek.Sq Li *
288521fa314SDavid van Moolenbroekasterisk in its prefix, to indicate that this is not a new system call:
289521fa314SDavid van Moolenbroek.Bd -literal -offset indent
290521fa314SDavid van Moolenbroek25812| write(1, "test\en", 5) = <..>
291521fa314SDavid van Moolenbroek25813| setuid(0) = 0
292521fa314SDavid van Moolenbroek25812|*write(1, "test\en", 5) = 5
293521fa314SDavid van Moolenbroek.Ed
294521fa314SDavid van Moolenbroek.Pp
295521fa314SDavid van MoolenbroekFinally,
296521fa314SDavid van Moolenbroek.Nm
297521fa314SDavid van Moolenbroekprints three dashes on their own line whenever the process context (program
298521fa314SDavid van Moolenbroekcounter and/or stack pointer) is changed during a system call.
299521fa314SDavid van MoolenbroekThis feature intends to help identify blocks of code run from signal handlers.
300521fa314SDavid van MoolenbroekThe following example shows a SIGALRM signal handler being invoked.
301521fa314SDavid van Moolenbroek.Bd -literal -offset indent
302521fa314SDavid van Moolenbroeksigsuspend([]) = ** SIGALRM ** -1 [EINTR]
303521fa314SDavid van Moolenbroek---
304521fa314SDavid van Moolenbroeksigprocmask(SIG_SETMASK, ~[], [ALRM]) = 0
305521fa314SDavid van Moolenbroeksigreturn({sc_mask=[], ..})
306521fa314SDavid van Moolenbroek---
307521fa314SDavid van Moolenbroekexit(0)
308521fa314SDavid van Moolenbroek.Ed
309521fa314SDavid van Moolenbroek.Pp
310521fa314SDavid van MoolenbroekHowever, the three dashes are not printed when a signal handler is invoked
311521fa314SDavid van Moolenbroekwhile the program is not in a system call, because the tracer does not see such
312521fa314SDavid van Moolenbroekinvocations.
313521fa314SDavid van MoolenbroekIt is however also printed for successful
314521fa314SDavid van Moolenbroek.Fn execve
315521fa314SDavid van Moolenbroekcalls.
316521fa314SDavid van Moolenbroek.Sh DIAGNOSTICS
317521fa314SDavid van Moolenbroek.Ex
318521fa314SDavid van Moolenbroek.Sh SEE ALSO
319521fa314SDavid van Moolenbroek.Xr ptrace 2
320521fa314SDavid van Moolenbroek.Sh AUTHORS
321521fa314SDavid van MoolenbroekThe
322521fa314SDavid van Moolenbroek.Nm
323521fa314SDavid van Moolenbroekutility was written by
324521fa314SDavid van Moolenbroek.An David van Moolenbroek
325521fa314SDavid van Moolenbroek.Aq david@minix3.org .
326521fa314SDavid van Moolenbroek.Sh BUGS
327521fa314SDavid van MoolenbroekWhile the utility aims to provide output for all system calls that can possibly
328521fa314SDavid van Moolenbroekbe made by user programs, output printers for a small number of rarely-used
329521fa314SDavid van Moolenbroekstructures and IOCTLs are still missing.  In such cases, plain pointers will be
330521fa314SDavid van Moolenbroekprinted instead of actual contents.
331521fa314SDavid van Moolenbroek.Pp
332521fa314SDavid van MoolenbroekA signal arrives at the tracing process when sent to the target process, even
333521fa314SDavid van Moolenbroekwhen the target process is blocking the signal and will thus receive it later.
334521fa314SDavid van MoolenbroekThis is a limitation of the ptrace infrastructure, although it does ensure that
335521fa314SDavid van Moolenbroeka target process is not able to block signals generated for tracing purposes.
336521fa314SDavid van MoolenbroekThe result is that signals are not always shown at the time that they are
337521fa314SDavid van Moolenbroektaken in by the target process, and that stack traces for signals may be off.
338521fa314SDavid van Moolenbroek.Pp
339521fa314SDavid van MoolenbroekAttaching to system services is currently not supported, due to limitations of
340521fa314SDavid van Moolenbroekthe ptrace infrastructure.  The
341521fa314SDavid van Moolenbroek.Nm
342521fa314SDavid van Moolenbroekutility will detect and safely detach from system services, though.
343