blob: 4e77c9b08a67a019dd8ebc3b3c38f3c36ed13e8d [file] [log] [blame] [view]
# zx_task_kill
<!-- Updated by update-docs-from-fidl, do not edit. -->
Kill the provided task (job, process, or thread).
<!-- Updated by update-docs-from-fidl, do not edit. -->
#include <zircon/syscalls.h>
zx_status_t zx_task_kill(zx_handle_t handle);
This asynchronously kills the given process, thread or job and its children
recursively, until the entire task tree rooted at *handle* is dead.
It is possible to wait for the task to be dead via the **ZX_TASK_TERMINATED**
signal. When the procedure completes, as observed by the signal, the task and
all its children are considered to be in the dead state and most operations
will no longer succeed.
If *handle* is a job and the syscall is successful, the job cannot longer be
used to create new processes.
When a process or job is killed via this syscall, the `return_code` is
**ZX_TASK_RETCODE_SYSCALL_KILL** as reported by [`zx_object_get_info()`] via
the **ZX_INFO_PROCESS** or **ZX_INFO_JOB** topic.
Processes and Jobs can also be killed by other agents such as the Job policy with
**ZX_POL_ACTION_KILL** or when the system is running low on memory [OOM](/docs/development/kernel/memory/
<!-- Updated by update-docs-from-fidl, do not edit. -->
*handle* must have **ZX_RIGHT_DESTROY**.
On success, `zx_task_kill()` returns **ZX_OK**. If a process or thread uses
this syscall to kill itself, this syscall does not return.
**ZX_ERR_BAD_HANDLE** *handle* is not a valid handle.
**ZX_ERR_WRONG_TYPE** *handle* is not a task handle.
**ZX_ERR_ACCESS_DENIED** *handle* does not have the **ZX_RIGHT_DESTROY**
- [`zx_job_create()`]
- [`zx_process_create()`]
<!-- References updated by update-docs-from-fidl, do not edit. -->