Create an exception channel for a given job, process, or thread.
#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() creates a channel that will receive
exceptions from the thread, process, or job.
handle is the thread, process, or job handle to receive exceptions from.
options can be 0 or ZX_EXCEPTION_CHANNEL_DEBUGGER to register for debug exceptions (process or job only).
out will be filled with the newly created channel endpoint on success. This channel will be read-only with the following rights:
Number of Exception Channels
Each task may have at most one regular exception channel and one debugger
exception channel, except for jobs. A single job may have up to
ZX_EXCEPTION_CHANNEL_JOB_DEBUGGER_MAX_COUNT debugger exception channels.
Attempting to create an exception channel on a task that already has the maximum number of channels for a given type will result in ZX_ERR_ALREADY_BOUND.
When an exception occurs, the channel will receive a message containing one
exception handle and one
The thread will remain blocked in the exception until the received exception
handle is closed, at which point it will either resume or exception processing
will continue according to the chosen behavior (see ZX_PROP_EXCEPTION_STATE
Closing the created channel handle will unregister the exception handler. If an exception message is waiting in the channel at the time it's closed, exception handling will continue on to the next handler in the search order.
handle must have ZX_RIGHT_INSPECT and have ZX_RIGHT_DUPLICATE and have ZX_RIGHT_TRANSFER and have ZX_RIGHT_MANAGE_THREAD.
If handle is of type ZX_OBJ_TYPE_JOB or ZX_OBJ_TYPE_PROCESS, it must have ZX_RIGHT_ENUMERATE.
zx_task_create_exception_channel() returns ZX_OK on success.
In the event of failure, a negative error value is returned.
ZX_ERR_ACCESS_DENIED The caller has a job policy in place preventing the creation of new channels.
ZX_ERR_ALREADY_BOUND The maximum number of exception channels of the given type are already bound to handle.
ZX_ERR_BAD_HANDLE handle is not a valid handle.
ZX_ERR_BAD_STATE handle is dying or dead.
ZX_ERR_INVALID_ARGS A bad value has been passed in options.
ZX_ERR_NO_MEMORY Failure due to lack of memory. There is no good way for userspace to handle this (unlikely) error. In a future build this error will no longer occur.
ZX_ERR_WRONG_TYPE handle is not that of a job, process, or thread.