摘要
检索系统事件的句柄。
声明
#include <zircon/syscalls.h>
zx_status_t zx_system_get_event(zx_handle_t root_job,
uint32_t kind,
zx_handle_t* event);
说明
root_job 必须是系统根作业的句柄。
kind 必须是下列其中一项:
ZX_SYSTEM_EVENT_OUT_OF_MEMORY
- 系统将返回一个事件,该事件将 当系统处于内存不足情况时,断言 ZX_EVENT_SIGNALED。 等待此事件的进程必须快速执行所有重要的 关停工作未指定此时可用内存量 事件收到信号,且未指定等待进程执行操作的时长 在内核开始终止进程或启动整个系统重新启动之前。ZX_SYSTEM_EVENT_IMMINENT_OUT_OF_MEMORY
- 系统将返回一个事件, 将在系统接近内存不足时断言 ZX_EVENT_SIGNALED 情况。此事件在稍微早于 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 事件。此事件的目的是让 Waiter 用于收集与即将发生的事件相关的诊断信息, ZX_SYSTEM_EVENT_OUT_OF_MEMORY 事件,因为现在可能为时已晚 在 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 收到信号时可靠。ZX_SYSTEM_EVENT_MEMORY_PRESSURE_CRITICAL
- 系统将返回一个事件 当系统上的可用内存 非常低。在本例中,内存压力等级低于 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 的情况。确切的可用内存量 事件发出时发出事件通知ZX_SYSTEM_EVENT_MEMORY_PRESSURE_WARNING
- 系统将返回一个事件 当系统上的可用内存 接近极低区间的情况。在这种情况下,内存压力等级为 不如 ZX_SYSTEM_EVENT_MEMORY_PRESSURE_CRITical 情况下的严重级别。通过 收到事件信号时,确切的可用内存量 未指定。ZX_SYSTEM_EVENT_MEMORY_PRESSURE_NORMAL
- 系统将返回一个事件, 当系统上的可用内存为 时,将断言 ZX_EVENT_SIGNALED 健康状况。收到事件信号时的确切可用内存量 未指定参数。
在以下文件中,内核将针对这五个事件断言 ZX_EVENT_SIGNALED 严重程度从高到低的顺序:ZX_SYSTEM_EVENT_MEMORY_PRESSURE_NORMAL, ZX_SYSTEM_EVENT_MEMORY_PRESSURE_WARNING, ZX_SYSTEM_EVENT_MEMORY_PRESSURE_CRITical、ZX_SYSTEM_EVENT_IMMINENT_OUT_OF_MEMORY、 和 ZX_SYSTEM_EVENT_OUT_OF_MEMORY。恰好其中一个事件将断言 ZX_EVENT_SIGNALED(在指定时间)。
ZX_SYSTEM_EVENT_OUT_OF_MEMORY 和 ZX_SYSTEM_EVENT_MEMORYPRESSURE* 检索与系统内存压力水平相对应的事件,但是有一个 这些事件预期用途的主要区别。进程 必须等待任何 ZX_SYSTEM_EVENT_MEMORYPRESSURE* 事件 执行可释放内存并尝试释放内存的操作 给系统带来的压力另一方面,等待 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 事件必须在 为彻底关停做好准备 - 现在尝试为时已晚 将内存压力恢复到健康的内存压力水平。
ZX_SYSTEM_EVENT_IMMINENT_OUT_OF_MEMORY 事件可视为随播事件 (针对 ZX_SYSTEM_EVENT_OUT_OF_MEMORY),这样就不会触发内存回收 而是用于捕获有助于调试的内存诊断信息 紧跟 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 事件(如果有)。
权限
无。
返回值
zx_system_get_event()
会在成功时返回 ZX_OK,并且 event 是一个有效的事件
处理,或者在失败时返回下面的错误代码。
错误
ZX_ERR_ACCESS_DENIED
调用进程政策无效,标识名
root_job 没有 kind 的 ZX_RIGHT_MANAGE_PROCESS 权限
ZX_SYSTEM_EVENT_OUT_OF_MEMORY,root_job 不是
根作业。
“ZX_ERR_INVALID_ARGS
”种类不属于指定支持的值
。