协议
启动器
在 fuchsia.process/launcher.fidl 中定义
用于启动进程的低级接口。
此接口用于手动组装进程。调用方会为新创建的进程提供所有功能。
创建进程通常使用 fdio_spawn
或 fdio_spawn_etc
,而不是直接使用此接口。fdio_spawn
和 fdio_spawn_etc
函数是使用此接口实现的。
调试程序和其他客户端需要创建处于挂起状态的进程通常直接使用此接口。这些客户端使用 CreateWithoutStarting
方法创建进程,而无需实际启动进程。
添加参数
将给定的参数添加到进程的命令行。
多次调用此方法会串联参数。
请求
名称 | 类型 |
---|---|
args |
vector<vector<uint8>>
|
环境变量
将给定变量添加到进程的环境变量。
多次调用此方法会串联变量。
请求
名称 | 类型 |
---|---|
environ |
vector<vector<uint8>>
|
添加句柄
将给定的句柄添加到进程的启动句柄中。
多次调用此方法会串联句柄。
请求
名称 | 类型 |
---|---|
handles |
vector<HandleInfo>
|
AddNames
将给定名称添加到进程的命名空间。
命名空间中的路径不能重叠。如需了解详情,请参阅 https://fuchsia.dev/fuchsia-src/concepts/process/namespaces。
多次调用此方法会将名称串联起来。
请求
名称 | 类型 |
---|---|
names |
vector<NameInfo>
|
创建且未启动
创建 info
所描述的进程,但不启动它。
处理此消息后,Launcher
会重置为其初始状态,并准备好启动另一个进程。
调用方负责使用 ProcessStartData
中的数据调用 zx_process_start
来实际启动进程。
当且仅当 status
为 ZX_OK
时,data
存在。
请求
名称 | 类型 |
---|---|
info |
LaunchInfo
|
回复
名称 | 类型 |
---|---|
status |
zx/Status
|
data |
ProcessStartData?
|
Launch
创建并启动由 info
描述的过程。
处理此消息后,Launcher
会重置为其初始状态,并准备好启动另一个进程。
当且仅当 status
为 ZX_OK
时,process
存在。
请求
名称 | 类型 |
---|---|
info |
LaunchInfo
|
回复
名称 | 类型 |
---|---|
status |
zx/Status
|
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/Status
|
executable |
handle<vmo>?
|
ldsvc |
fuchsia.ldsvc/Loader?
|
结构
HandleInfo 资源
在 fuchsia.process/launcher.fidl 中定义
在启动时提供给进程的句柄的相关信息。
系统会在引导序列中为进程提供一组初始句柄。其中一些句柄与进程参数标识符相关联,这些标识符指定新进程的预期用途。
此结构表示一个这样的句柄及其关联的标识符。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
handle |
handle<handle>
|
用于此进程参数的句柄。 |
无默认值 |
id |
uint32
|
进程参数标识符。 有关已知进程参数的定义,请参阅 <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 |
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 |
|