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