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 必须是系统的根作业的句柄。

种类必须是以下其中一项:

  • 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_EVENT_SIGNALED。这种情况下的内存压力等级低于 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 的情况。未指定事件收到信号时可用的确切内存量。

  • ZX_SYSTEM_EVENT_MEMORY_PRESSURE_WARNING - 系统将返回一个事件,当系统上的可用内存接近极低范围时,该事件将断言 ZX_EVENT_SIGNALED。这种情况下的内存压力等级低于 ZX_SYSTEM_EVENT_MEMORY_PRESSURE_CRITIAL 中的内存压力等级。未指定事件收到信号时可用的确切内存量。

  • 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_CRITRY、ZX_ENT_SYSTEM_EVENT_SYSTEM_EVENT_SYSTEM。在指定时间,其中一个事件会断言 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_SYSTEM_EVENT_OUT_OF_MEMORY 的 ZX_RIGHT_MANAGE_PROCESS 权限,root_job 不是系统的根作业。

ZX_ERR_INVALID_ARGS 种类不是上面指定支持的值之一。