豫言操作系统底层接口之进程(可选能力):运行程序、取退出码、终止;管道与数据收发用句柄包。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 豫言操作系统底层进程 0.1.0 状态:草案,可选能力。文言本见[文言版](规范.文言.md)。通用规则见[调用约定](../调用约定.汉语.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`),内核只有两个任务槽,同一时刻只有一个子进程。
# 豫言操作系统底层进程〇点一点〇 状:草案,可选之能。汉语本见[汉语版](规范.汉语.md)。通用之规,见[调用约定](../调用约定.文言.md);状态之码表,见[底层基础](../底层基础/规范.文言.md);管道、读写与等待,见[底层句柄](../底层句柄/规范.文言.md)。 ## 范围 起一程序为子进程,取其退出码,必要时终之。子进程之标准流,以底层句柄之柄(含 `建管道` 所造之管道端)授之;候其退,用 `等待`(进程之柄“可读”即已退)。平台不能起进程,则诸函数皆返 58。 ## 函数(`进程。接口。豫`) | 函数 | 参 | 用 | | --- | --- | --- | | 运行程序 | 块址, 出 | 依块所载起进程,进程之柄四字节书于出址(类别 7);程序无则返 44,不可执行则返 2 | | 取进程退出码 | 句柄, 出 | 退出码四字节;进程未退则返 6 | | 终止进程 | 句柄 | 终进程;被终者之退出码,平台定之,垫层不宜倚其数 | 进程之柄,以 `关闭` 释之;闭柄不终进程。 ## 运行程序之块 各字段四字节,小端;块首为块之大小,调用者书满四十四字节,被调者唯读其所识者: | 偏移 | 字段 | | --- | --- | | 0 | 块之大小(首版为 44) | | 4 | 路径址 | | 8 | 路径长 | | 12 | 参数块址(诸参各以零终,依次相连,含 argv[0],格式同 `取参数块`) | | 16 | 参数块长 | | 20 | 环境块址(「名=值」各以零终,依次相连;长为零,谓承本进程之环境) | | 24 | 环境块长 | | 28 | 标准入之柄(-1 谓承本进程之标准入) | | 32 | 标准出之柄(-1 谓承) | | 36 | 标准误之柄(-1 谓承) | | 40 | 工作目录之柄(目录柄;-1 谓承) | ## 未决 - **路径之解与授权。**起程序,本乃环境之权,与“相对目录柄、不越界”之文件模不同。首版由后端依本平台之规解路径(绝对路径,或相对工作目录之柄);是否受初始授权所约(如唯许运行预开目录内之程序),待定。 - **裸机。**执行器今以“复制任务加装载新 Wasm 模块”为运行程序(唯能运 `.wasm`),内核唯二任务槽,一时唯一子进程。