xref: /minix3/minix/usr.bin/trace/trace.1 (revision 521fa314e2aaec3c192c15f2aaa4c677a544e62a)
1*521fa314SDavid van Moolenbroek.Dd November 2, 2014
2*521fa314SDavid van Moolenbroek.Dt TRACE 1
3*521fa314SDavid van Moolenbroek.Os
4*521fa314SDavid van Moolenbroek.Sh NAME
5*521fa314SDavid van Moolenbroek.Nm trace
6*521fa314SDavid van Moolenbroek.Nd print process system calls and signals
7*521fa314SDavid van Moolenbroek.Sh SYNOPSIS
8*521fa314SDavid van Moolenbroek.Nm
9*521fa314SDavid van Moolenbroek.Op Fl fgNsVv
10*521fa314SDavid van Moolenbroek.Op Fl o Ar file
11*521fa314SDavid van Moolenbroek.Op Fl p Ar pid
12*521fa314SDavid van Moolenbroek.Op Ar command
13*521fa314SDavid van Moolenbroek.Sh DESCRIPTION
14*521fa314SDavid van MoolenbroekThe
15*521fa314SDavid van Moolenbroek.Nm
16*521fa314SDavid van Moolenbroekutility shows one or more processes to be traced.
17*521fa314SDavid van MoolenbroekFor each traced process,
18*521fa314SDavid van Moolenbroek.Nm
19*521fa314SDavid van Moolenbroekprints the system calls the process makes and the signals
20*521fa314SDavid van Moolenbroekit receives.
21*521fa314SDavid van MoolenbroekThe user can let
22*521fa314SDavid van Moolenbroek.Nm
23*521fa314SDavid van Moolenbroekstart a
24*521fa314SDavid van Moolenbroek.Ar command
25*521fa314SDavid van Moolenbroekto be traced, and/or attach to one or more existing processes.
26*521fa314SDavid van Moolenbroek.Pp
27*521fa314SDavid van MoolenbroekThe utility will run until no processes are left to trace, or until the user
28*521fa314SDavid van Moolenbroekpresses the interrupt key (typically Ctrl-C).
29*521fa314SDavid van MoolenbroekPressing this key once will cause all attached processes to be detached, with
30*521fa314SDavid van Moolenbroekthe hope that the command that was started will also terminate cleanly from the
31*521fa314SDavid van Moolenbroekinterruption.
32*521fa314SDavid van MoolenbroekPressing the interrupt key once more kills the command that was started.
33*521fa314SDavid van Moolenbroek.Pp
34*521fa314SDavid van MoolenbroekThe following options are available:
35*521fa314SDavid van Moolenbroek.Bl -tag -width XoXfileXX
36*521fa314SDavid van Moolenbroek.It Fl f
37*521fa314SDavid van MoolenbroekFollow forks.
38*521fa314SDavid van MoolenbroekAttach automatically to forked child processes.
39*521fa314SDavid van MoolenbroekChild processes of the started command will be treated as attached processes,
40*521fa314SDavid van Moolenbroekin that upon Ctrl-C presses they will be detached rather than killed.
41*521fa314SDavid van Moolenbroek.It Fl g
42*521fa314SDavid van MoolenbroekEnable call grouping.
43*521fa314SDavid van MoolenbroekWith this option, the tracing engine tries to reduce noise from call preemption
44*521fa314SDavid van Moolenbroekby first polling the process that was active last.
45*521fa314SDavid van MoolenbroekThis should reduce in cleaner output, but may also cause a single process to be
46*521fa314SDavid van Moolenbroekscheduled repeatedly and thus cause starvation.
47*521fa314SDavid van Moolenbroek.It Fl N
48*521fa314SDavid van MoolenbroekPrint all names.
49*521fa314SDavid van MoolenbroekBy default, the most structure fields are printed with their name.
50*521fa314SDavid van MoolenbroekThis option enables printing of all available names, which also includes
51*521fa314SDavid van Moolenbroeksystem call parameter names.
52*521fa314SDavid van MoolenbroekThis flag may be useful to figure out the meaning of a parameter, and for
53*521fa314SDavid van Moolenbroekautomatic processing of the output.
54*521fa314SDavid van Moolenbroek.It Fl s
55*521fa314SDavid van MoolenbroekPrint stack traces.
56*521fa314SDavid van MoolenbroekEach system call, and each signal arriving outside a system call, will be
57*521fa314SDavid van Moolenbroekpreceded by a line showing the process's current stack trace.
58*521fa314SDavid van MoolenbroekFor signals blocked by the target process, the stack trace may not be
59*521fa314SDavid van Moolenbroekmeaningful.
60*521fa314SDavid van MoolenbroekStack traces may not be supported on all platforms.
61*521fa314SDavid van Moolenbroek.It Fl V
62*521fa314SDavid van MoolenbroekPrint values only.
63*521fa314SDavid van MoolenbroekIf this flag is given once, numerical values will be printed instead of
64*521fa314SDavid van Moolenbroekstring constants.
65*521fa314SDavid van MoolenbroekIn addition, if it is given twice, the addresses of structures will be printed
66*521fa314SDavid van Moolenbroekinstead of their contents.
67*521fa314SDavid van Moolenbroek.It Fl v
68*521fa314SDavid van MoolenbroekIncrease verbosity.
69*521fa314SDavid van MoolenbroekBy default, the output will be terse, in that not all structure fields are
70*521fa314SDavid van Moolenbroekshown, and strings and arrays are not always printed in full.
71*521fa314SDavid van MoolenbroekIf this flag is provided once, more and longer output will be printed.
72*521fa314SDavid van MoolenbroekIf it is provided twice, the tracer will print as much as possible.
73*521fa314SDavid van Moolenbroek.It Fl o Ar file
74*521fa314SDavid van MoolenbroekRedirect output.
75*521fa314SDavid van MoolenbroekBy default, the output is sent to standard error.
76*521fa314SDavid van MoolenbroekWith this option, the output is written to the given
77*521fa314SDavid van Moolenbroek.Ar file
78*521fa314SDavid van Moolenbroekinstead.
79*521fa314SDavid van Moolenbroek.It Fl p Ar pid
80*521fa314SDavid van MoolenbroekAttach to a process.
81*521fa314SDavid van MoolenbroekThis option makes
82*521fa314SDavid van Moolenbroek.Nm
83*521fa314SDavid van Moolenbroekattach to an existing process with process ID
84*521fa314SDavid van Moolenbroek.Ar pid .
85*521fa314SDavid van MoolenbroekThis option may be used multiple times.
86*521fa314SDavid van MoolenbroekWhen attaching to one or more processes this way, starting a command becomes
87*521fa314SDavid van Moolenbroekoptional.
88*521fa314SDavid van Moolenbroek.El
89*521fa314SDavid van Moolenbroek.Pp
90*521fa314SDavid van MoolenbroekIf the user presses the information key (typically Ctrl-T), the list of traced
91*521fa314SDavid van Moolenbroekprocess along with their current status will be printed.
92*521fa314SDavid van Moolenbroek.Sh OUTPUT FORMAT
93*521fa314SDavid van MoolenbroekSystem calls are printed with the following general output format:
94*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
95*521fa314SDavid van Moolenbroek.Sy name Ns ( Ns Sy parameters Ns ) = Sy result
96*521fa314SDavid van Moolenbroek.Ed
97*521fa314SDavid van Moolenbroek.Pp
98*521fa314SDavid van MoolenbroekOther informational lines may be printed about the status of the process.
99*521fa314SDavid van MoolenbroekThese lines typically start with an uppercase letter, while system calls
100*521fa314SDavid van Moolenbroekalways start with a lowercase letter or an underscore.
101*521fa314SDavid van MoolenbroekThe following example shows the tracer output for a program that prints its
102*521fa314SDavid van Moolenbroekown user ID:
103*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
104*521fa314SDavid van MoolenbroekTracing printuid (pid 12685)
105*521fa314SDavid van Moolenbroekminix_getinfo() = 0
106*521fa314SDavid van Moolenbroekgetuid() = 0 (euid=1)
107*521fa314SDavid van Moolenbroekwrite(1, "My uid: 0\en", 10) = 10
108*521fa314SDavid van Moolenbroekexit(0)
109*521fa314SDavid van MoolenbroekProcess exited normally with code 0
110*521fa314SDavid van Moolenbroek.Ed
111*521fa314SDavid van Moolenbroek.Pp
112*521fa314SDavid van MoolenbroekThe first and last lines of the output provide status information about the
113*521fa314SDavid van Moolenbroektraced process.
114*521fa314SDavid van MoolenbroekSome calls return multiple results; extended results are printed in parentheses
115*521fa314SDavid van Moolenbroekafter the primary call result, typically in
116*521fa314SDavid van Moolenbroek.Va name Ns = Ns Va value
117*521fa314SDavid van Moolenbroekformat for clarity.
118*521fa314SDavid van MoolenbroekSystem calls that do not return on success, such as
119*521fa314SDavid van Moolenbroek.Fn exit ,
120*521fa314SDavid van Moolenbroekare printed without the equals sign and result, unless they fail.
121*521fa314SDavid van MoolenbroekSystem call failure is printed according to POSIX conventions; that is, the
122*521fa314SDavid van Moolenbroekcall is assumed to return -1 with the value of
123*521fa314SDavid van Moolenbroek.Va errno
124*521fa314SDavid van Moolenbroekprinted in square brackets after it:
125*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
126*521fa314SDavid van Moolenbroeksetuid(0) = -1 [EPERM]
127*521fa314SDavid van Moolenbroek.Ed
128*521fa314SDavid van Moolenbroek.Pp
129*521fa314SDavid van MoolenbroekIf a system call ends up in an IPC-level failure, the -1 value will be preceded
130*521fa314SDavid van Moolenbroekby an
131*521fa314SDavid van Moolenbroek.Dq Li <ipc>
132*521fa314SDavid van Moolenbroekstring.
133*521fa314SDavid van MoolenbroekHowever, this string will be omitted if the system call itself is printed at
134*521fa314SDavid van Moolenbroekthe IPC level (that is, as an
135*521fa314SDavid van Moolenbroek.Fn ipc_sendrec
136*521fa314SDavid van Moolenbroekcall), generally because
137*521fa314SDavid van Moolenbroek.Nm
138*521fa314SDavid van Moolenbroekhas no handler to print the actual system call.
139*521fa314SDavid van Moolenbroek.Pp
140*521fa314SDavid van MoolenbroekSignals are printed as they arrive at the traced process, using two asterisks
141*521fa314SDavid van Moolenbroekon both side of the signal name.
142*521fa314SDavid van MoolenbroekSignals may arrive both during and outside the execution of a system call:
143*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
144*521fa314SDavid van Moolenbroekread(3, ** SIGUSR1 ** &0xeffff867, 4096) = -1 [EINTR]
145*521fa314SDavid van Moolenbroek** SIGUSR2 **
146*521fa314SDavid van Moolenbroekgetpid() = 5278 (ppid=5277)
147*521fa314SDavid van Moolenbroekkill(5278, SIGTERM) = ** SIGTERM ** <..>
148*521fa314SDavid van MoolenbroekProcess terminated from signal SIGTERM
149*521fa314SDavid van Moolenbroek.Ed
150*521fa314SDavid van Moolenbroek.Pp
151*521fa314SDavid van MoolenbroekMultiple signals may be printed consecutively.
152*521fa314SDavid van MoolenbroekThe above example illustrates a few other important aspects of output
153*521fa314SDavid van Moolenbroekformatting.
154*521fa314SDavid van MoolenbroekSome call parameters may be printed only after the system call returns, in
155*521fa314SDavid van Moolenbroekorder to show their actual value.
156*521fa314SDavid van MoolenbroekFor the
157*521fa314SDavid van Moolenbroek.Fn read
158*521fa314SDavid van Moolenbroekcall, this would be the bytes that were read.
159*521fa314SDavid van MoolenbroekUpon failure, no bytes were read, so the buffer pointer is printed instead.
160*521fa314SDavid van MoolenbroekFinally, if a call that is expected to return (here,
161*521fa314SDavid van Moolenbroek.Fn kill )
162*521fa314SDavid van Moolenbroekdoes not return before the process terminates, the line ends with a
163*521fa314SDavid van Moolenbroek.Dq Li <..>
164*521fa314SDavid van Moolenbroekmarker.
165*521fa314SDavid van MoolenbroekThis is an instance of call preemption; more about that later.
166*521fa314SDavid van Moolenbroek.Pp
167*521fa314SDavid van MoolenbroekPointers are printed with a
168*521fa314SDavid van Moolenbroek.Sq Li &
169*521fa314SDavid van Moolenbroekprefix, except for NULL, which is printed using its own name.
170*521fa314SDavid van MoolenbroekIn general, named constants are used instead of numerical constants wherever
171*521fa314SDavid van Moolenbroekthat makes sense.
172*521fa314SDavid van MoolenbroekFor pointers of which the address is not available, typically because its
173*521fa314SDavid van Moolenbroekcontents are passed by value,
174*521fa314SDavid van Moolenbroek.Dq Li &..
175*521fa314SDavid van Moolenbroekis shown instead.
176*521fa314SDavid van Moolenbroek.Pp
177*521fa314SDavid van MoolenbroekData buffers are printed as double-quoted strings, using C-style character
178*521fa314SDavid van Moolenbroekescaping for nontextual bytes.
179*521fa314SDavid van MoolenbroekIf either the verbosity level or a copy error prevents the whole data buffer
180*521fa314SDavid van Moolenbroekfrom being printed, two dots will be printed after the closing quote.
181*521fa314SDavid van MoolenbroekThe same is done when printing a string buffer which does not have a null
182*521fa314SDavid van Moolenbroektermination byte within its range.
183*521fa314SDavid van MoolenbroekPath names are shown in full regardless of the verbosity level.
184*521fa314SDavid van Moolenbroek.Pp
185*521fa314SDavid van MoolenbroekStructures are printed as a set of structure fields enclosed in curly brackets.
186*521fa314SDavid van MoolenbroekThe
187*521fa314SDavid van Moolenbroek.Va name Ns = Ns Va value
188*521fa314SDavid van Moolenbroekformat is used, unless printing names for that structure type would introduce
189*521fa314SDavid van Moolenbroektoo much noise and the
190*521fa314SDavid van Moolenbroek.Dq print all names
191*521fa314SDavid van Moolenbroekoption is not given.
192*521fa314SDavid van MoolenbroekFor many structures, by default only a subset of their fields are printed.
193*521fa314SDavid van MoolenbroekIn this case, a
194*521fa314SDavid van Moolenbroek.Dq Li ..
195*521fa314SDavid van Moolenbroekentry is added at the end.
196*521fa314SDavid van MoolenbroekIn some cases, an attempt is made to print only the most useful fields:
197*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
198*521fa314SDavid van Moolenbroekstat("/etc/motd", {st_mode=S_IFREG|0755, st_size=747, ..}) = 0
199*521fa314SDavid van Moolenbroekstat("/dev/tty", {st_mode=S_IFCHR|0666, st_rdev=<5,0>, ..}) = 0
200*521fa314SDavid van Moolenbroek.Ed
201*521fa314SDavid van Moolenbroek.Pp
202*521fa314SDavid van MoolenbroekAs shown in the above example, flag fields are printed as a combination of
203*521fa314SDavid van Moolenbroeknamed constants, separated by a
204*521fa314SDavid van Moolenbroek.Sq Li |
205*521fa314SDavid van Moolenbroekpipe symbol.
206*521fa314SDavid van MoolenbroekAny leftover numerical bits are printed at the end.
207*521fa314SDavid van MoolenbroekThe example also shows the format in which major/minor pairs are printed for
208*521fa314SDavid van Moolenbroekdevice numbers.
209*521fa314SDavid van MoolenbroekThis is a custom format; there are a few other custom formats throughout the
210*521fa314SDavid van Moolenbroek.Nm
211*521fa314SDavid van Moolenbroekoutput which are supposed to be sufficiently self-explanatory (and rare).
212*521fa314SDavid van Moolenbroek.Pp
213*521fa314SDavid van MoolenbroekArrays are printed using square brackets.
214*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
215*521fa314SDavid van Moolenbroekpipe2([3, 4], 0) = 0
216*521fa314SDavid van Moolenbroekgetdents(3, [..(45)], 4096) = 1824
217*521fa314SDavid van Moolenbroekgetdents(3, [{d_name="."}, ..(+44)], 4096) = 1824
218*521fa314SDavid van Moolenbroekgetdents(3, [], 4096) = 0
219*521fa314SDavid van Moolenbroek.Ed
220*521fa314SDavid van Moolenbroek.Pp
221*521fa314SDavid van MoolenbroekIf the array contents are not printed as per the settings for the verbosity
222*521fa314SDavid van Moolenbroeklevel, a single pseudo-element shows how many actual elements were in the array
223*521fa314SDavid van Moolenbroek(the second line in the example).
224*521fa314SDavid van MoolenbroekIf the number of printed elements is limited, a final pseudo-element shows how
225*521fa314SDavid van Moolenbroekmany additional elements were not printed (the third line in the example).
226*521fa314SDavid van MoolenbroekIf a copy error occurs while part of the array has been printed already, a
227*521fa314SDavid van Moolenbroeklast
228*521fa314SDavid van Moolenbroek.Dq Li ..(?)
229*521fa314SDavid van Moolenbroekpseudo-element is printed; for immediate failure, the array's pointer is shown.
230*521fa314SDavid van MoolenbroekEmpty arrays will be printed as
231*521fa314SDavid van Moolenbroek.Dq Li [] .
232*521fa314SDavid van Moolenbroek.Pp
233*521fa314SDavid van MoolenbroekBit sets are printed as arrays except with just a space and no comma as
234*521fa314SDavid van Moolenbroekbit separator, closely following the output format of
235*521fa314SDavid van Moolenbroek.Nm Ns 's
236*521fa314SDavid van Moolenbroekoriginal inspiration
237*521fa314SDavid van Moolenbroek.Sy strace .
238*521fa314SDavid van MoolenbroekFor signal sets in particular, an inverted bit set may be shown, thus printing
239*521fa314SDavid van Moolenbroekonly the bits which are not set; such sets are prefixed with a
240*521fa314SDavid van Moolenbroek.Sq Li ~
241*521fa314SDavid van Moolenbroekto the opening bracket:
242*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
243*521fa314SDavid van Moolenbroeksigprocmask(SIG_SETMASK, ~[USR1 USR2], []) = 0
244*521fa314SDavid van Moolenbroek.Ed
245*521fa314SDavid van Moolenbroek.Pp
246*521fa314SDavid van MoolenbroekNote how the
247*521fa314SDavid van Moolenbroek.Dq Li SIG
248*521fa314SDavid van Moolenbroekprefixes are omitted for brevity in this case.
249*521fa314SDavid van Moolenbroek.Pp
250*521fa314SDavid van MoolenbroekWhen multiple processes are traced at once, each line will have a prefix that
251*521fa314SDavid van Moolenbroekshows the PID of the corresponding process.
252*521fa314SDavid van MoolenbroekWhen the number of processes drops to one again, one more line is prefixed with
253*521fa314SDavid van Moolenbroekthe PID of the remaining process, but using a
254*521fa314SDavid van Moolenbroek.Sq Li '
255*521fa314SDavid van Moolenbroekinstead of a
256*521fa314SDavid van Moolenbroek.Sq Li |
257*521fa314SDavid van Moolenbroeksymbol:
258*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
259*521fa314SDavid van Moolenbroekfork() = 25813
260*521fa314SDavid van Moolenbroek25813| Tracing test*F (pid 25813)
261*521fa314SDavid van Moolenbroek25813| fork() = 0
262*521fa314SDavid van Moolenbroek25812| waitpid(-1, &.., WNOHANG) = 0
263*521fa314SDavid van Moolenbroek25813| exit(1)
264*521fa314SDavid van Moolenbroek25813| Process exited normally with code 1
265*521fa314SDavid van Moolenbroek25812' waitpid(-1, W_EXITED(1), WNOHANG) = 25813
266*521fa314SDavid van Moolenbroekexit(0)
267*521fa314SDavid van MoolenbroekProcess exited normally with code 0
268*521fa314SDavid van Moolenbroek.Ed
269*521fa314SDavid van Moolenbroek.Pp
270*521fa314SDavid van MoolenbroekIf a process is preempted while making a system call, the system call will
271*521fa314SDavid van Moolenbroekbe shown as suspended with the
272*521fa314SDavid van Moolenbroek.Dq Li <..>
273*521fa314SDavid van Moolenbroeksuffix.
274*521fa314SDavid van MoolenbroekLater, when the system call is resumed, the output so far will be repeated,
275*521fa314SDavid van Moolenbroekeither in full or (due to memory limitations) with
276*521fa314SDavid van Moolenbroek.Dq Li <..>
277*521fa314SDavid van Moolenbroekin its body, before the remaining part of the system call is printed.
278*521fa314SDavid van MoolenbroekThis time, the line will have a
279*521fa314SDavid van Moolenbroek.Sq Li *
280*521fa314SDavid van Moolenbroekasterisk in its prefix, to indicate that this is not a new system call:
281*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
282*521fa314SDavid van Moolenbroek25812| write(1, "test\en", 5) = <..>
283*521fa314SDavid van Moolenbroek25813| setuid(0) = 0
284*521fa314SDavid van Moolenbroek25812|*write(1, "test\en", 5) = 5
285*521fa314SDavid van Moolenbroek.Ed
286*521fa314SDavid van Moolenbroek.Pp
287*521fa314SDavid van MoolenbroekFinally,
288*521fa314SDavid van Moolenbroek.Nm
289*521fa314SDavid van Moolenbroekprints three dashes on their own line whenever the process context (program
290*521fa314SDavid van Moolenbroekcounter and/or stack pointer) is changed during a system call.
291*521fa314SDavid van MoolenbroekThis feature intends to help identify blocks of code run from signal handlers.
292*521fa314SDavid van MoolenbroekThe following example shows a SIGALRM signal handler being invoked.
293*521fa314SDavid van Moolenbroek.Bd -literal -offset indent
294*521fa314SDavid van Moolenbroeksigsuspend([]) = ** SIGALRM ** -1 [EINTR]
295*521fa314SDavid van Moolenbroek---
296*521fa314SDavid van Moolenbroeksigprocmask(SIG_SETMASK, ~[], [ALRM]) = 0
297*521fa314SDavid van Moolenbroeksigreturn({sc_mask=[], ..})
298*521fa314SDavid van Moolenbroek---
299*521fa314SDavid van Moolenbroekexit(0)
300*521fa314SDavid van Moolenbroek.Ed
301*521fa314SDavid van Moolenbroek.Pp
302*521fa314SDavid van MoolenbroekHowever, the three dashes are not printed when a signal handler is invoked
303*521fa314SDavid van Moolenbroekwhile the program is not in a system call, because the tracer does not see such
304*521fa314SDavid van Moolenbroekinvocations.
305*521fa314SDavid van MoolenbroekIt is however also printed for successful
306*521fa314SDavid van Moolenbroek.Fn execve
307*521fa314SDavid van Moolenbroekcalls.
308*521fa314SDavid van Moolenbroek.Sh DIAGNOSTICS
309*521fa314SDavid van Moolenbroek.Ex
310*521fa314SDavid van Moolenbroek.Sh SEE ALSO
311*521fa314SDavid van Moolenbroek.Xr ptrace 2
312*521fa314SDavid van Moolenbroek.Sh AUTHORS
313*521fa314SDavid van MoolenbroekThe
314*521fa314SDavid van Moolenbroek.Nm
315*521fa314SDavid van Moolenbroekutility was written by
316*521fa314SDavid van Moolenbroek.An David van Moolenbroek
317*521fa314SDavid van Moolenbroek.Aq david@minix3.org .
318*521fa314SDavid van Moolenbroek.Sh BUGS
319*521fa314SDavid van MoolenbroekWhile the utility aims to provide output for all system calls that can possibly
320*521fa314SDavid van Moolenbroekbe made by user programs, output printers for a small number of rarely-used
321*521fa314SDavid van Moolenbroekstructures and IOCTLs are still missing.  In such cases, plain pointers will be
322*521fa314SDavid van Moolenbroekprinted instead of actual contents.
323*521fa314SDavid van Moolenbroek.Pp
324*521fa314SDavid van MoolenbroekA signal arrives at the tracing process when sent to the target process, even
325*521fa314SDavid van Moolenbroekwhen the target process is blocking the signal and will thus receive it later.
326*521fa314SDavid van MoolenbroekThis is a limitation of the ptrace infrastructure, although it does ensure that
327*521fa314SDavid van Moolenbroeka target process is not able to block signals generated for tracing purposes.
328*521fa314SDavid van MoolenbroekThe result is that signals are not always shown at the time that they are
329*521fa314SDavid van Moolenbroektaken in by the target process, and that stack traces for signals may be off.
330*521fa314SDavid van Moolenbroek.Pp
331*521fa314SDavid van MoolenbroekAttaching to system services is currently not supported, due to limitations of
332*521fa314SDavid van Moolenbroekthe ptrace infrastructure.  The
333*521fa314SDavid van Moolenbroek.Nm
334*521fa314SDavid van Moolenbroekutility will detect and safely detach from system services, though.
335