摘要
為指定的工作、程序或執行緒建立例外狀況管道。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_task_create_exception_channel(zx_handle_t handle,
uint32_t options,
zx_handle_t* out);
說明
「zx_task_create_exception_channel()
」建立了一個可接收頻道通知的管道
執行緒、程序或工作的例外狀況。
handle 是用於接收例外狀況的執行緒、程序或工作控制代碼。
options 可為 0 或 ZX_EXCEPTION_CHANNEL_DEBUGGER
,以便註冊偵錯
例外狀況 (僅限程序或工作)。
成功時,out 將會填入新建立的管道端點。這個 管道將處於唯讀狀態,並具備下列權限:
ZX_RIGHT_TRANSFER
ZX_RIGHT_WAIT
ZX_RIGHT_READ
例外狀況管道數量
每項工作最多只能有一個一般例外狀況管道和一個偵錯工具
例外狀況管道除外一項工作最多可達
ZX_EXCEPTION_CHANNEL_JOB_DEBUGGER_MAX_COUNT
個偵錯工具的例外狀況管道。
嘗試在已超過上限的工作中建立例外狀況管道
特定類型的頻道數量會產生 ZX_ERR_ALREADY_BOUND
個。
例外狀況訊息
例外狀況發生時,管道會收到含有
例外狀況處理常式及一個 zx_exception_info_t
資料。
執行緒在例外狀況中會維持封鎖狀態,直到收到例外狀況為止
控制代碼關閉,此時便會繼續處理或例外狀況處理
將根據指定的行為繼續執行 (請參閱 ZX_PROP_EXCEPTION_STATE
於 zx_object_get_property()
建立)。
解除繫結
關閉已建立的管道帳號代碼後,系統會取消註冊例外狀況處理常式。如果 管道關閉時收到例外狀況訊息,例外狀況訊息則視為例外狀況 繼續處理下一個搜尋順序的下一個處理常式。
權限
handle 必須具有 ZX_RIGHT_INSPECT
且具有 ZX_RIGHT_DUPLICATE
且具有 ZX_RIGHT_TRANSFER
,並且具有 ZX_RIGHT_MANAGE_THREAD
。
如果 handle 類型為 ZX_OBJ_TYPE_JOB
或 ZX_OBJ_TYPE_PROCESS
,則必須具備 ZX_RIGHT_ENUMERATE
。
傳回值
zx_task_create_exception_channel()
會在成功時傳回 ZX_OK
。
如果失敗,系統會傳回負的錯誤值。
錯誤
ZX_ERR_ACCESS_DENIED
呼叫端已製定工作政策,
建立新的管道
ZX_ERR_ALREADY_BOUND
指定的例外管道數量上限
類型已繫結至 handle。
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
ZX_ERR_BAD_STATE
帳號代碼正在死亡或死掉。
ZX_ERR_INVALID_ARGS
選項中的值不正確。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。
ZX_ERR_WRONG_TYPE
「處理常式」不是工作、程序或執行緒的唯一依據。