协议
启动器
在 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/Status
|
data |
ProcessStartData?
|
发布
创建并启动 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 |
client_end: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 |
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 |
|