# zx_task_create_exception_channel

## NAME

<!-- Updated by update-docs-from-fidl, do not edit. -->

Create an exception channel for a given job, process, or thread.

## SYNOPSIS

<!-- Updated by update-docs-from-fidl, do not edit. -->

```c
#include <zircon/syscalls.h>

zx_status_t zx_task_create_exception_channel(zx_handle_t handle,
                                             uint32_t options,
                                             zx_handle_t* out);
```

## DESCRIPTION

`zx_task_create_exception_channel()` creates a channel which 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:

* **ZX_RIGHT_TRANSFER**
* **ZX_RIGHT_WAIT**
* **ZX_RIGHT_READ**

### Exception Messages

When an exception occurs, the channel will receive a message containing one
exception handle and one `zx_exception_info_t` data.

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**
in [`zx_object_get_property()`]).

### Unbinding

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.

## RIGHTS

<!-- Updated by update-docs-from-fidl, do not edit. -->

*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**.

## RETURN VALUE

`zx_task_create_exception_channel()` returns **ZX_OK** on success.
In the event of failure, a negative error value is returned.

## ERRORS

**ZX_ERR_ACCESS_DENIED** The caller has a job policy in place preventing the
creation of new channels.

**ZX_ERR_ALREADY_BOUND** *handle* is already bound to an exception channel.

**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.

## SEE ALSO

 - [exceptions](/docs/concepts/kernel/exceptions.md)
 - [`zx_channel_read()`]

<!-- References updated by update-docs-from-fidl, do not edit. -->

[`zx_channel_read()`]: channel_read.md
[`zx_object_get_property()`]: object_get_property.md
