Solaris 动态跟踪指南

探测器

表 25–1 中对 proc 探测器进行了说明。

表 25–1 proc 探测器

探测器 

说明 

create

使用 fork(2)forkall(2)fork1(2)vfork(2) 创建进程时将触发的探测器。args[0] 指向对应于新的子进程的 psinfo_t。可以通过检查派生线程 lwpsinfo_tpr_flag 成员中的 PR_VFORKP,将 vfork 与其他 fork 变体区分开来。可以通过检查父进程的 psinfo_t (curpsinfo) 和子进程的 psinfo_t (args[0]) 的 pr_nlwp 成员,将 fork1forkall 区分开来。因为 create 探测器仅在成功创建了进程之后触发,且 LWP 创建为创建进程的一部分,所以对于任何在创建进程时(为新进程触发 create 探测器之前)创建的 LWP,都将触发 lwp-create

exec

进程使用 exec(2) 系统调用的以下变体装入新进程映像时将触发的探测器:exec(2)execle(2)execlp(2)execv(2)execve(2)execvp(2)exec 探测器在装入进程映像之前触发。因此进程变量(如 execnamecurpsinfo)将包含装入映像前的进程状态。在触发 exec 探测器之后的某个时间,exec-failure 探测器或 exec-success 探测器随后将在同一线程中触发。args[0] 指向新进程映像的路径。

exec-failure

exec(2) 变体失败时将触发的探测器。exec-failure 探测器仅在同一线程中触发了 exec 探测器之后触发。args[0] 中提供了 errno(3C) 值。

exec-success

exec(2) 变体成功时将触发的探测器。与 exec-failure 探测器一样,exec-success 探测器仅在同一线程中触发了 exec 探测器之后触发。触发 exec-success 探测器时,进程变量(如 execnamecurpsinfo)将包含装入新的进程映像之后的进程状态。

exit

当前线程正在退出时将触发的探测器。退出的原因(使用某个 SIGCHLD siginfo.h(3HEAD) 代码表示)包含在 args[0] 中。

fault

线程遇到计算机故障时将触发的探测器。故障代码(如 proc(4) 中所定义)包含在 args[0] 中。args[1] 指向对应于故障的 siginfo 结构。只有引起信号的那些故障可以触发 fault 探测器。

lwp-create

创建 LWP 时将触发的探测器,通常作为 thr_create(3C) 的结果。args[0] 指向对应于新线程的 lwpsinfo_targs[1] 指向包含该线程进程的 psinfo_t

lwp-start

在新创建的 LWP 的上下文中触发的探测器。lwp-start 探测器将在执行任何用户级指令之前触发。如果该 LWP 是进程中的第一个 LWP,则 start 探测器将在 lwp-start 探测器之前触发。

lwp-exit

LWP 正在退出(由于信号或对 thr_exit(3C) 的显式调用)时将触发的探测器。

signal-discard

信号被发送到单线程进程,且进程未阻塞该信号,但忽略该信号时将触发的探测器。在这些条件下,信号在生成时将被废弃。目标进程和线程的 lwpsinfo_tpsinfo_t 分别包含在 args[0]args[1] 中。信号数字包含在 args[2] 中。

signal-send

将信号发送到线程或进程时将触发的探测器。signal-send 探测器在发送进程和线程的上下文中触发。接收进程和线程的 lwpsinfo_tpsinfo_t 分别包含在 args[0]args[1] 中。信号数字包含在 args[2] 中。接收进程和线程时,signal-send 始终后跟 signal-handlesignal-clear

signal-handle

探测器就在线程处理信号之前的瞬间触发。signal-handle 探测器在将要处理信号的线程的上下文中触发。信号数字包含在 args[0] 中。指向对应于信号的 siginfo_t 结构的指针包含在 args[1] 中。如果没有 siginfo_t 结构或者信号处理程序未设置 SA_SIGINFO 标志,args[1] 的值将为 NULL。进程中的信号处理程序的地址包含在 args[2] 中。

signal-clear

因为目标线程正在等待 sigwait(2)sigwaitinfo(3RT)sigtimedwait(3RT) 中的信号而清除暂挂信号时,将触发的探测器。在这些条件下,将清除暂挂信号并将信号数字返回到调用方。信号数字包含在 args[0] 中。signal-clear 在先前的等待线程的上下文中触发。

start

在新创建的进程的上下文中触发的探测器。start 探测器将在执行进程中任何用户级指令之前触发。