zx_task_create_exception_channel

摘要

為指定工作、程序或執行緒建立例外狀況管道。

宣告

#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_INSPECTZX_RIGHT_DUPLICATE,且具有 ZX_RIGHT_TRANSFER 且具有 ZX_RIGHT_MANAGE_THREAD

如果 handleZX_OBJ_TYPE_JOBZX_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「處理常式」不是工作、程序或執行緒的處理程序。

另請參閱