zx_task_bind_exception_port
名称
task_bind_exception_port —— 在指定的作业,进程或线程上,绑定或取消绑定异常端口。
概要
#include <zircon/syscalls.h>zx_status_t zx_task_bind_exception_port(zx_handle_t object, zx_handle_t eport, uint64_t key, uint32_t options);
描述
task_bind_exception_port() 用于将端口绑定(或解除绑定)到作业,进程或线程的异常端口上。
其中eport参数是由zx_port_create创建的IO端口。 同一个IO端口可以绑定到多个对象上。
key在后续的异常报告中被传回,这也是端口消息协议的一部分。
当端口绑定到对象的异常端口时,它将参与到异常的处理中。 请参阅下文了解异常是如何处理的。
解除绑定
为了从异常端口取消绑定,请传递ZX_HANDLE_INVALID到eport。 这将从object中删除异常端口,并且eport将不再参与到object的异常处理中。
指向eport的所有句柄均已关闭时,如果eport仍处于绑定状态,那么这些异常端口将自动解除绑定。
线程当前可能正在等待绑定eport的程序在解除绑定时的响应,此时对于线程可以有两种选择:
继续进行异常处理,就好像eport从未被绑定一样,并且这也是默认行为。
让线程继续等待与eport相同类型的异常端口的响应。 这是通过在取消绑定eport时传递ZX_EXCEPTION_PORT_UNBIND_QUIETLY到options参数来实现的。 例如,当调试器想要从线程的进程中分离,但又想让线程处于停滞状态等待异常响应时,此选项便很有用。
权限
TODO(ZX-2399)
返回值
task_bind_exception_port() 调用成功则返回ZX_OK。 如果调用失败,则返回负的错误码。
错误码
ZX_ERR_ALREADY_BOUND:object已经绑定了异常端口。
ZX_ERR_BAD_HANDLE: object是无效句柄,或eport是无效句柄。 请注意,当从异常端口解除绑定时,参数eport的值是ZX_HANDLE_INVALID。
ZX_ERR_WRONG_TYPE:object不是作业,进程或线程类型的对象且不是ZX_HANDLE_INVALID,或eport不是端口类型对象且不是ZX_HANDLE_INVALID。
ZX_ERR_INVALID_ARGS:向options参数中传递了错误的值。
ZX_ERR_NO_MEMORY:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。
