总结
创建新作业。
声明
#include <zircon/syscalls.h>
zx_status_t zx_job_create(zx_handle_t parent_job,
uint32_t options,
zx_handle_t* out);
说明
zx_job_create()
会根据给定父作业创建一个新的子作业对象。
成功后,将返回新作业的句柄。
内核会跟踪并限制作业的“高度”,即它与根作业的距离。在高度超过内部“最大高度”值的父级下创建作业是非法的。(不过,在此类作业下创建流程是合法的。)
作业句柄可能会等待 (TODO(cpu):展开)
权限
parent_job 必须为 ZX_OBJ_TYPE_JOB
类型,且具有 ZX_RIGHT_MANAGE_JOB
。
返回值
zx_job_create()
会在成功时返回 ZX_OK
和新作业的句柄(通过 out)。如果失败,则返回负的错误值。
错误
ZX_ERR_BAD_HANDLE
parent_job 不是有效的句柄。
ZX_ERR_WRONG_TYPE
parent_job 不是作业句柄。
ZX_ERR_INVALID_ARGS
options 为非零值,或 out 为无效指针。
ZX_ERR_ACCESS_DENIED
parent_job 没有 ZX_RIGHT_WRITE
或 ZX_RIGHT_MANAGE_JOB
权限。
ZX_ERR_OUT_OF_RANGE
parent_job 的高度过大,无法创建子作业。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
ZX_ERR_BAD_STATE
:父作业对象处于不活跃状态。