豫言操作系统底层进程 0.1.0
状态:草案,可选能力。文言本见文言版。通用规则见[调用约定](../调用约定.汉语.md),状态码表见[底层基础](../底层基础/规范.汉语.md),管道、读写与等待见[底层句柄](../底层句柄/规范.汉语.md)。
范围
启动一个程序作为子进程,取得其退出码,必要时终止它。子进程的标准流用底层句柄的句柄(包括 建管道 造出的管道端)传递;等待它退出用 等待(进程句柄“可读”即已退出)。平台不能启动进程时所有函数返回 58。
函数(进程。接口。豫)
| 函数 | 参数 | 作用 | | --- | --- | --- | | 运行程序 | 块址, 出 | 按块中所载启动进程,进程句柄 4 字节写入出址(类别 7);程序不存在返回 44,不可执行返回 2 | | 取进程退出码 | 句柄, 出 | 退出码 4 字节;进程尚未退出返回 6 | | 终止进程 | 句柄 | 终止进程;被终止进程的退出码由平台定,shim 不应依赖具体数值 |
进程句柄用 关闭 释放;关闭句柄不终止进程。
运行程序的块
各字段 4 字节,小端;块头是块大小,调用者写满 44 字节,被调用者只读它认识的部分:
| 偏移 | 字段 |
| --- | --- |
| 0 | 块大小(首版为 44) |
| 4 | 路径址 |
| 8 | 路径长 |
| 12 | 参数块址(各参数以零结尾依次相连,含 argv[0],格式同 取参数块) |
| 16 | 参数块长 |
| 20 | 环境块址(名=值 各以零结尾依次相连;长为 0 表示继承本进程的环境) |
| 24 | 环境块长 |
| 28 | 标准输入句柄(-1 表示继承本进程的标准输入) |
| 32 | 标准输出句柄(-1 表示继承) |
| 36 | 标准错误句柄(-1 表示继承) |
| 40 | 工作目录句柄(目录句柄;-1 表示继承) |
未决
- 路径的解释与授权。启动程序本质上是环境权限,与“相对目录句柄、不越界”的文件模型不同。首版由后端按本平台规则解释路径(绝对路径,或相对工作目录句柄);是否要受初始授权约束(例如只允许运行预开目录内的程序)待定。
- 裸机。执行器目前把“运行程序”做成复制任务加装载新的 Wasm 模块(只能运行
.wasm),内核只有两个任务槽,同一时刻只有一个子进程。