表 25–1 中对 proc 探测器进行了说明。
表 25–1 proc 探测器
探测器 |
说明 |
---|---|
create |
使用 fork(2)、forkall(2)、fork1(2) 或 vfork(2) 创建进程时将触发的探测器。args[0] 指向对应于新的子进程的 psinfo_t。可以通过检查派生线程 lwpsinfo_t 的 pr_flag 成员中的 PR_VFORKP,将 vfork 与其他 fork 变体区分开来。可以通过检查父进程的 psinfo_t (curpsinfo) 和子进程的 psinfo_t (args[0]) 的 pr_nlwp 成员,将 fork1 与 forkall 区分开来。因为 create 探测器仅在成功创建了进程之后触发,且 LWP 创建为创建进程的一部分,所以对于任何在创建进程时(为新进程触发 create 探测器之前)创建的 LWP,都将触发 lwp-create。 |
exec |
进程使用 exec(2) 系统调用的以下变体装入新进程映像时将触发的探测器:exec(2)、execle(2)、execlp(2)、execv(2)、execve(2)、execvp(2)。exec 探测器在装入进程映像之前触发。因此进程变量(如 execname 和 curpsinfo)将包含装入映像前的进程状态。在触发 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 探测器时,进程变量(如 execname 和 curpsinfo)将包含装入新的进程映像之后的进程状态。 |
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_t。args[1] 指向包含该线程进程的 psinfo_t。 |
lwp-start |
在新创建的 LWP 的上下文中触发的探测器。lwp-start 探测器将在执行任何用户级指令之前触发。如果该 LWP 是进程中的第一个 LWP,则 start 探测器将在 lwp-start 探测器之前触发。 |
lwp-exit |
LWP 正在退出(由于信号或对 thr_exit(3C) 的显式调用)时将触发的探测器。 |
signal-discard |
信号被发送到单线程进程,且进程未阻塞该信号,但忽略该信号时将触发的探测器。在这些条件下,信号在生成时将被废弃。目标进程和线程的 lwpsinfo_t 和 psinfo_t 分别包含在 args[0] 和 args[1] 中。信号数字包含在 args[2] 中。 |
signal-send |
将信号发送到线程或进程时将触发的探测器。signal-send 探测器在发送进程和线程的上下文中触发。接收进程和线程的 lwpsinfo_t 和 psinfo_t 分别包含在 args[0] 和 args[1] 中。信号数字包含在 args[2] 中。接收进程和线程时,signal-send 始终后跟 signal-handle 或 signal-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 探测器将在执行进程中任何用户级指令之前触发。 |