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 事件提前發出信號。這個事件的目的是允許等候程序收集與即將發生的 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_CRITICAL 的情況。未指定傳送事件時可用的確切記憶體量。

  • ZX_SYSTEM_EVENT_MEMORY_PRESSURE_NORMAL - 系統會傳回事件,並在系統的可用記憶體健康狀態良好時宣告 ZX_EVENT_SIGNALED。未指定事件發出信號時,確切可用的記憶體量。

核心將依照下列五個事件的嚴重性,宣告 ZX_EVENT_SIGNALED:ZX_SYSTEM_EVENT_MEMORY_PRESSURE_NORMAL、 ZX_SYSTEM_EVENT_MEMORY_PRESSURE_, ZX_SYSTEM_EVENT_MEMORIT_EVENT_MEMORY_PRESS_PRESS_PRESS_CRALY_CRALED剛好有一項事件會在特定時間宣告 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_OUT 事件密切偵錯。

權限

無。

傳回值

zx_system_get_event() 會在成功時傳回 ZX_OK,而 event 會是有效控制代碼,失敗時則會是下方的錯誤代碼。

錯誤

ZX_ERR_ACCESS_DENIED 呼叫程序的政策無效,處理 root_job 沒有種類 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 的 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 的 ZX_SYSTEM_EVENT_OUT_OF_MEMORY 權限,則並非系統的根工作。

ZX_ERR_INVALID_ARGS 種類不是上述支援的值之一。