proch_reg 内核服务

用途

注册调出处理程序。

语法

#include <sys/proc.h>
int proch_reg(struct prochr *)
注意:prochr 结构包含以下元素,必须在调用proch_reg 之前设置:
void (* proch_handler)(struct prochr *, int, long)
unsigned int
  int prochr_mask

参数

描述
int prochr_mask 指定要对其请求调出的内核事件的集合。 与 old_style 接口不同,只有指定的事件才会调用调出。 此掩码是通过将下列任何已定义的值组合在一起进行 OR 运算而形成的: 
prochr_initialize
进程已创建。
prochr_terminate
进程已终止
PROCHR_EXEC
进程已发出 exec 系统调用
prochr_threadinit
已创建线程
prochr_threadterm
线程已终止
proch_handler 指定发生指定的内核事件时要调用的调出函数。

描述

如果同一个struct prochr *注册了多次,内核中只会保留最近指定的信息。

struct prochr *不会复制到内存中的新位置。 因此,如果结构发生更改,那么结果将不可预测。 此结构不需要被置顶。

新型接口的主要考虑点是提高可扩展性。 仅当进行标注时,才会获取锁定。 将保留所有当前已注册的调出事件类型的摘要掩码。 每次调用proch_regproch_unreg时,该摘要掩码都会更新,即使在注册相同的struct prochr * 时也是如此。 此外,该锁定是一个复杂锁定,因此一旦注册了调出,调用这些锁定时就不会发生锁定争用,因为该锁定是只读的。

对已注册的处理程序函数进行调出时,传递的参数为:

  • 指向已注册 prochr 结构的指针
  • 调出请求值,用于表示调出的原因
  • 线程或进程 ID

返回值

成功完成后,proch_reg内核服务返回值为 0。 唯一的错误 (非零) 返回是从尝试使用 NULL 指针进行注册。

执行环境

proch_reg内核服务只能从进程环境中调用。