摘要
在處理程序中啟動執行作業。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_process_start(zx_handle_t handle,
zx_handle_t thread,
zx_vaddr_t entry,
zx_vaddr_t stack,
zx_handle_t arg1,
uintptr_t arg2);
說明
zx_process_start()
與 zx_thread_start()
相似,但用於
在處理程序中啟動第一個執行緒的目的。
zx_process_start()
會讓執行緒在程式上執行
計數器,而不是由 項目 指定,並將堆疊指標設為 堆疊。
arg1 和 arg2 的引數會安排在架構中
函式呼叫中前兩個引數所使用的特定暫存器
才能展開執行緒所有其他暫存器在開始時都會為零。
第一個引數 (arg1) 是帳號代碼,會從
呼叫端啟動程序的程序
系統就會把適當的控制值放在 arg1 中
。如果 zx_process_start()
傳回錯誤,arg1 就會關閉,而不是
而不是轉移到開始的階段
或者,arg1 可以是 ZX_HANDLE_INVALID
,而不是帳號代碼。
在此情況下,程序開頭為 ZX_HANDLE_INVALID
(即 0)
而非控制代碼也就是說
本程序「沒有」帳號代碼,且「不得」對任何
物件會在程序外共用的物件只有 zx_process_start()
是
將帳號代碼轉移至不含該程序的處理程序
利用本身已有的控制代碼發出系統呼叫 (arg1 通常是
「Bootstrap」控制代碼)。沒有帳號代碼的程序
不需要帳號代碼的系統呼叫,例如 zx_process_exit()
。
但前提是已提供 vDSO 對應可以建立新的核心
不需要帳號代碼的系統呼叫物件,例如
zx_vmo_create()
,但無法使用這些物件
轉移程序變得更簡單
而且無法將帳戶轉交其他團隊
這只是通訊的唯一方式,就是透過對應到
虛擬位址空間
權限
handle 必須是 ZX_OBJ_TYPE_PROCESS
類型,且包含 ZX_RIGHT_WRITE
。
thread 類型必須是 ZX_OBJ_TYPE_THREAD
,且包含 ZX_RIGHT_WRITE
。
arg1 必須包含 ZX_RIGHT_TRANSFER
。
傳回值
zx_process_start()
會在成功時傳回 ZX_OK
。
如果失敗,系統會傳回負的錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
process 或 thread 或 arg1 不是有效的帳號。
「ZX_ERR_WRONG_TYPE
」「程序」並非程序控制代碼,或是「執行緒」
而非執行緒控點
ZX_ERR_ACCESS_DENIED
帳號代碼執行緒缺少 ZX_RIGHT_WRITE
或 thread
不屬於程序,或者帳號代碼程序缺少 ZX_RIGHT_WRITE
,或
arg1 缺少 ZX_RIGHT_TRANSFER
。
ZX_ERR_BAD_STATE
程序已在執行或已結束。
ZX_ERR_INVALID_ARGS
entry 不是使用者空間地址,不是
或不是 0
標準網址。
另請參閱
zx_handle_close()
zx_handle_duplicate()
zx_object_wait_async()
zx_object_wait_many()
zx_object_wait_one()
zx_process_create()
zx_thread_create()
zx_thread_exit()
zx_thread_start()