zx_system_get_event

摘要

检索系统事件的句柄。

声明

#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种类不属于指定支持的值 。