摘要
为给定作业、进程或线程创建异常渠道。
声明
#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
handle 不是有效的句柄。
ZX_ERR_BAD_STATE
handle 即将终止或终止。
ZX_ERR_INVALID_ARGS
options 中传递了错误的值。
ZX_ERR_NO_MEMORY
因内存不足而失败。
用户空间没有好办法处理这种(不太可能)错误。
在将来的版本中,此错误不会再发生。
ZX_ERR_WRONG_TYPE
handle 不是作业、进程或线程的句柄。