zx_process_start

摘要

在處理程序中啟動執行作業。

宣告

#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() 會讓執行緒在程式上執行 計數器,而不是由 項目 指定,並將堆疊指標設為 堆疊arg1arg2 的引數會安排在架構中 函式呼叫中前兩個引數所使用的特定暫存器 才能展開執行緒所有其他暫存器在開始時都會為零。

第一個引數 (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 processthreadarg1 不是有效的帳號。

ZX_ERR_WRONG_TYPE」「程序」並非程序控制代碼,或是「執行緒」 而非執行緒控點

ZX_ERR_ACCESS_DENIED帳號代碼執行緒缺少 ZX_RIGHT_WRITEthread 不屬於程序,或者帳號代碼程序缺少 ZX_RIGHT_WRITE,或 arg1 缺少 ZX_RIGHT_TRANSFER

ZX_ERR_BAD_STATE 程序已在執行或已結束。

ZX_ERR_INVALID_ARGS entry 不是使用者空間地址,不是 或不是 0 標準網址。

另請參閱