摘要
暂停给定任务。目前只能挂起线程或进程句柄。
声明
#include <zircon/syscalls.h>
zx_status_t zx_task_suspend(zx_handle_t handle, zx_handle_t* token);
说明
zx_task_suspend()
会导致请求的任务挂起
执行。任务暂停不同步,任务可能不会同步
在调用返回之前挂起。此任务很快将暂停
在调用 zx_task_suspend()
之后(除非其当前在
在这种情况下,内核会在被取消屏蔽后挂起。
可以在任务开始前暂停和/或恢复任务。如果任务 是在暂停期间开始的,则在执行任何代码之前都会进入暂停状态。 同样,在已暂停的进程上启动新线程也会挂起该线程 然后再执行任何代码
对已暂停的任务调用 zx_task_kill()
将成功终止
任务。
任务无法暂停自身或其任何父级任务,因为它永远都不会 收到挂起令牌,并且无法继续执行。
正在恢复
若要允许任务继续运行,请关闭挂起令牌句柄。任务将
只要存在开放的挂起令牌,就会一直处于暂停状态。就像暂停一样
恢复操作是异步进行的,因此在调用
即使没有其他挂起令牌,zx_handle_close()
调用也会返回
处于打开状态。
信号和例外情况
线程可以断言两个相关信号:
ZX_THREAD_RUNNING
ZX_THREAD_SUSPENDED
在通过
zx_process_start()
或 zx_thread_start()
。时间
当线程启动时,它会断言 ZX_THREAD_RUNNING
是否挂起
但如被中止,则会切换为 ZX_THREAD_SUSPENDED
然后才能执行任何代码
ZX_EXCP_PROCESS_STARTING
和 ZX_EXCP_THREAD_STARTING
调试
异常也会在启动时发送,无论任务是否暂停。
权限
handle 的类型必须为 ZX_OBJ_TYPE_THREAD
或 ZX_OBJ_TYPE_PROCESS
,并且具有 ZX_RIGHT_WRITE
。
返回值
如果成功,zx_task_suspend()
会返回 ZX_OK
。
如果失败,则返回负的错误值。
错误
ZX_ERR_BAD_HANDLE
handle 不是有效的句柄。
ZX_ERR_WRONG_TYPE
handle 不是线程或进程句柄。
“ZX_ERR_INVALID_ARGS
”令牌是无效的指针。
ZX_ERR_BAD_STATE
该任务已终止或终止,无法暂停。
ZX_ERR_NO_MEMORY
未能分配内存。
ZX_ERR_NOT_SUPPORTED
:发起调用的线程尝试挂起自身,或
父任务之一
限制
目前仅支持线程和进程句柄。