zx_task_bind_exception_port


英文原文快照


名称

task_bind_exception_port —— 在指定的作业,进程或线程上,绑定或取消绑定异常端口。

概要

  1. #include <zircon/syscalls.h>
  2. 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_INVALIDeport。 这将从object中删除异常端口,并且eport将不再参与到object的异常处理中。

指向eport的所有句柄均已关闭时,如果eport仍处于绑定状态,那么这些异常端口将自动解除绑定。

线程当前可能正在等待绑定eport的程序在解除绑定时的响应,此时对于线程可以有两种选择:

  • 继续进行异常处理,就好像eport从未被绑定一样,并且这也是默认行为。

  • 让线程继续等待与eport相同类型的异常端口的响应。 这是通过在取消绑定eport时传递ZX_EXCEPTION_PORT_UNBIND_QUIETLYoptions参数来实现的。 例如,当调试器想要从线程的进程中分离,但又想让线程处于停滞状态等待异常响应时,此选项便很有用。

    权限

TODO(ZX-2399)

返回值

task_bind_exception_port() 调用成功则返回ZX_OK。 如果调用失败,则返回负的错误码。

错误码

ZX_ERR_ALREADY_BOUNDobject已经绑定了异常端口。

ZX_ERR_BAD_HANDLEobject是无效句柄,或eport是无效句柄。 请注意,当从异常端口解除绑定时,参数eport的值是ZX_HANDLE_INVALID

ZX_ERR_WRONG_TYPEobject不是作业,进程或线程类型的对象且不是ZX_HANDLE_INVALID,或eport不是端口类型对象且不是ZX_HANDLE_INVALID

ZX_ERR_INVALID_ARGS:向options参数中传递了错误的值。

ZX_ERR_NO_MEMORY:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。

另见

exceptions. port_create. port_wait. task_resume.