事件是指设备驱动程序向相关实体发送的消息,用以指示发生了状态更改。在 Solaris OS 中,事件以用户定义的名称-值对结构的形式实现,这些结构使用 nvlist* 函数进行管理。(请参见 nvlist_alloc(9F) 手册页。)事件由供应商、类以及子类组成。例如,可以定义一个类用于监视环境条件。环境类可以具有子类,用来指示温度、风扇状态以及电源方面的变化。
发生状态更改时,设备将通知驱动程序。驱动程序随后将使用 ddi_log_sysevent(9F) 函数在称为 sysevent 的队列中记录此事件。sysevent 队列会将事件传递到用户级,以便通过 syseventd 守护进程或 syseventconfd 守护进程进行处理。这些守护进程会将通知发送到订阅了指定事件通知的所有应用程序。
用户级应用程序的设计者可以使用以下两种方法处理事件:
应用程序可以使用 libsysevent(3LIB) 中的例程向 syseventd 守护进程订阅发生指定事件时的通知。
开发者可以编写单独的用户级应用程序来响应事件。此类型应用程序需要通过 syseventadm(1M) 进行注册。syseventconfd 遇到指定事件时,应用程序会根据实际情况运行并处理此事件。
下图对此流程进行了说明。