通訊協定
啟動器
定義於 fuchsia.process/launcher.fidl
用於啟動程序的低階介面。
這個介面用於手動組合程序。呼叫端會提供新建立程序的所有功能。
建立程序通常會使用 fdio_spawn 或 fdio_spawn_etc,而非直接使用這個介面。fdio_spawn 和 fdio_spawn_etc 函式是使用這個介面實作。
偵錯工具和其他需要在暫停狀態下建立程序的用戶端,通常會直接使用這個介面。這些用戶端會使用 CreateWithoutStarting 方法建立程序,但不會實際啟動程序。
AddArgs
將指定引數新增至程序的指令列。
多次呼叫這個方法會串連引數。
要求
| 名稱 | 類型 |
|---|---|
args |
vector<vector<uint8>>
|
AddEnvirons
將指定變數新增至程序的環境變數。
多次呼叫這個方法會串連變數。
要求
| 名稱 | 類型 |
|---|---|
environ |
vector<vector<uint8>>
|
AddHandles
將指定控制代碼新增至程序的啟動控制代碼。
多次呼叫這個方法會串連控制代碼。
要求
| 名稱 | 類型 |
|---|---|
handles |
vector<HandleInfo>
|
AddNames
將指定名稱新增至程序的命名空間。
命名空間中的路徑不得重疊。詳情請參閱 https://fuchsia.dev/fuchsia-src/concepts/process/namespaces。
多次呼叫這個方法會串連名稱。
要求
| 名稱 | 類型 |
|---|---|
names |
vector<NameInfo>
|
CreateWithoutStarting
建立 info 描述的程序,但不會啟動。
處理完這則訊息後,Launcher 會重設為初始狀態,並準備啟動另一個程序。
呼叫端必須使用 ProcessStartData 中的資料呼叫 zx_process_start,才能實際啟動程序。
只有在 status 為 ZX_OK 時,才會顯示 data。
要求
| 名稱 | 類型 |
|---|---|
info |
LaunchInfo
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
data |
ProcessStartData?
|
啟動
建立並啟動 info 描述的程序。
處理完這則訊息後,Launcher 會重設為初始狀態,並準備啟動另一個程序。
只有在 status 為 ZX_OK 時,才會顯示 process。
要求
| 名稱 | 類型 |
|---|---|
info |
LaunchInfo
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
process |
handle<process>?
|
SetOptions
設定建立程序時使用的選項。
多次呼叫這個方法會覆寫目前的選項。
要求
| 名稱 | 類型 |
|---|---|
options |
uint32
|
解析器
定義於 fuchsia.process/resolver.fidl
用於將名稱解析為執行檔和程式庫載入器的介面。
執行檔本身通常不足以建立工作程序,因為許多執行檔也會載入共用程式庫。在 Fuchsia 上,沒有共用程式庫的全域集區。相反地,每個程序都有相關聯的 fuchsia.ldsvc.Loader,可存取適合該程序的共用程式庫私人集區。
這個介面提供通訊協定,可將名稱解析為執行檔的 zx.Handle:VMO,以及相關聯共用資料庫的 fuchsia.ldsvc.Loader。
這個介面很少直接使用。相反地,fdio_spawn 和 fdio_spawn_etc 會在嘗試執行含有 #!resolve 指令的檔案時,在內部使用這個介面。
已淘汰
解決
將指定的 name 解析為 executable 和共用程式庫載入器。
如果存在,executable 適合用作 LaunchInfo 的 executable 屬性,特別是它會具有 ZX_RIGHT_EXECUTE。如果存在,ldsvc 適合在啟動程序時做為 PA_LDSVC_LOADER 控制代碼。
舉例來說,解析器可能會在套件中找到指定的 name,並從套件傳回可執行的二進位檔,以及限定於該套件的共用程式庫載入器。
要求
| 名稱 | 類型 |
|---|---|
name |
string:2048
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
executable |
handle<vmo>?
|
ldsvc |
client_end:fuchsia.ldsvc/Loader?
|
STRUCTS
HandleInfo 資源
定義於 fuchsia.process/launcher.fidl
啟動時提供給程序的控制代碼相關資訊。
程序會在啟動序列中取得一組初始控制代碼。其中部分控制代碼與程序引數 ID 相關聯,這些 ID 會指定新程序預期的用途。
這個結構代表一個這類控點及其相關聯的 ID。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
handle |
handle<handle>
|
這個程序引數要使用的控制代碼。 |
無預設值 |
id |
uint32
|
程序引數 ID。 如需常見程序引數的定義,請參閱 <zircon/processargs.h>。 |
無預設值 |
LaunchInfo 資源
定義於 fuchsia.process/launcher.fidl
啟動程序所需的資訊。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
executable |
handle<vmo>
|
要在程序中執行的執行檔。 |
無預設值 |
job |
handle<job>
|
要在哪個工作建立程序。 |
無預設值 |
name |
string:32
|
要指派給所建立程序的名稱。 |
無預設值 |
NameInfo 資源
定義於 fuchsia.process/launcher.fidl
在啟動時提供給程序的命名空間項目。
程序會在啟動序列中取得一組初始控制代碼。其中部分控制代碼與路徑相關聯,這些路徑會指定新程序做為命名空間項目的預期用途。
這個結構代表一個這類控制代碼及其相關聯的命名空間路徑。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
path |
fuchsia.io/Path
|
安裝相關目錄的路徑。 必須是絕對路徑 (即開頭為「/」)。 |
無預設值 |
directory |
client_end:fuchsia.io/Directory
|
相關聯的目錄。 |
無預設值 |
ProcessStartData 資源
定義於 fuchsia.process/launcher.fidl
啟動程序所需的資訊。
如要開始這項程序,請使用提供的引數呼叫 zx_process_start。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
process |
handle<process>
|
建立的程序。 |
無預設值 |
root_vmar |
handle<vmar>
|
建立程序時建立的 vmar 物件。 請參閱 https://fuchsia.dev/fuchsia-src/reference/syscalls/process_create.md。 |
無預設值 |
thread |
handle<thread>
|
處理程序的初始執行緒。 啟動程序時,應傳遞至 |
無預設值 |
entry |
uint64
|
程序中初始進入點的位址。 啟動程序時,應傳遞至 |
無預設值 |
stack |
uint64
|
程序初始執行緒的堆疊指標值。 啟動程序時,應傳遞至 |
無預設值 |
bootstrap |
handle<channel>
|
啟動時要傳遞至程序的啟動程序管道。 啟動程序時,應傳遞至 |
無預設值 |
vdso_base |
uint64
|
啟動時要傳遞至程序的 vDSO 基本位址。 啟動程序時,應傳遞至 |
無預設值 |
base |
uint64
|
載入的 ELF 檔案基本載入位址。 通常由偵錯工具或其他檢查程序的工具使用。 |
無預設值 |
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| MAX_RESOLVE_NAME_SIZE |
2048
|
uint32 |
|