摘要
為指定工作、程序或執行緒建立例外狀況管道。
宣告
#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_object_get_property()
中的 ZX_PROP_EXCEPTION_STATE
)。
解除繫結
關閉已建立的管道控制代碼,即可取消註冊例外狀況處理常式。如果例外狀況訊息在頻道關閉時在管道中等待,例外狀況處理將繼續依照搜尋順序的下一個處理常式進行。
權限
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
指定類型的例外狀況管道數量上限已繫結至帳號代碼。
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
ZX_ERR_BAD_STATE
帳號代碼在死亡或死亡。
ZX_ERR_INVALID_ARGS
選項中傳遞了無效值。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。
ZX_ERR_WRONG_TYPE
「處理常式」不是工作、程序或執行緒的處理程序。