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_PROP_EXCEPTION_STATEzx_object_get_property() 建立)。

解除繫結

關閉已建立的管道帳號代碼後,系統會取消註冊例外狀況處理常式。如果 管道關閉時收到例外狀況訊息,例外狀況訊息則視為例外狀況 繼續處理下一個搜尋順序的下一個處理常式。

權限

handle 必須具有 ZX_RIGHT_INSPECT 且具有 ZX_RIGHT_DUPLICATE 且具有 ZX_RIGHT_TRANSFER,並且具有 ZX_RIGHT_MANAGE_THREAD

如果 handle 類型為 ZX_OBJ_TYPE_JOBZX_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「處理常式」不是工作、程序或執行緒的唯一依據。

另請參閱