模块契约Process API
错误
API 失败时使用 xrtGetError() 读取 xrt.process 域错误。错误包含通用类别、Process 错误码、操作名和平台错误码。后台等待错误还可以通过 xrtProcessError() 取得新的错误引用。
错误代码索引
| 常量 | 失败范围 |
|---|
XPROCESS_ERROR_ARGUMENT | 公共指针、枚举或长度参数无效。 |
XPROCESS_ERROR_CONFIG | 启动选项组合或工作目录无效。 |
XPROCESS_ERROR_COMMAND | 程序、参数或 Shell 命令无法表达。 |
XPROCESS_ERROR_ENVIRONMENT | 环境读取、转换或覆盖失败。 |
XPROCESS_ERROR_PIPE | 标准流、错误通道或 Pipeline 管道失败。 |
XPROCESS_ERROR_SPAWN | 平台创建或子进程启动阶段失败。 |
XPROCESS_ERROR_OPEN | 默认关联程序拒绝文件路径或 URI。 |
XPROCESS_ERROR_WAIT | 等待或退出状态采集失败。 |
XPROCESS_ERROR_READ | stdout、stderr 或终端读取失败。 |
XPROCESS_ERROR_WRITE | stdin 或 Pipeline 输入写入失败。 |
XPROCESS_ERROR_CLOSE | 父端管道关闭失败。 |
XPROCESS_ERROR_SIGNAL | 中断、终止或强杀请求失败。 |
XPROCESS_ERROR_CALLBACK | 输出观察回调拒绝继续执行。 |
XPROCESS_ERROR_TERMINAL | ConPTY/PTY 能力、启动或尺寸操作失败。 |
XPROCESS_ERROR_THREAD | 内部等待或并发排空线程失败。 |
XPROCESS_ERROR_LIMIT | 命令、捕获或平台资源达到显式上限。 |
快速开始
直接执行不会经过 Shell。只有命令明确需要管道、重定向、变量展开或 Shell 内建语法时,才使用 xrtProcessShellConfigInit()。
使用默认程序打开
启用 process_open 后,xrtProcessOpen() 请求操作系统使用默认关联程序打开文件路径或 URI:
Windows 使用 Shell 关联处理器,macOS 使用 /usr/bin/open,其他 POSIX 平台直接执行 xdg-open。目标始终作为独立参数传递,不经过命令解释器,因此不需要也不允许调用方自行拼接 shell 转义。
返回 true 只表示系统已经接受打开请求。关联程序可能复用已有进程,POSIX 桌面启动器也可能稍后失败,所以该入口不会伪造可等待的 xprocess 或“界面已经显示”的结果。空目标、非法 UTF-8、缺少桌面启动器和系统关联失败都进入 xrt.process 域的 XPROCESS_ERROR_OPEN。
配置
xrtProcessConfigInit() 设置以下默认值:
Target = XPROCESS_EXEC- 继承当前环境
- 创建独立进程组
- 三个标准流都继承
- Terminal 默认尺寸为 120 x 30
Args 不包含 argv[0],每项都是独立零结尾 UTF-8 字符串。Arg0 为空时使用 Program。全部配置数据只需存活到 xrtProcessSpawn() 返回。
环境使用 xprocessenv 的 Name/Value 表达。Value 为空指针表示删除变量,指向空字符串表示保留变量但设置空值;重复名称采用最后一项。
标准流
| 模式 | 含义 |
|---|
XPROCESS_IO_INHERIT | 继承父进程对应标准流 |
XPROCESS_IO_PIPE | 创建由父进程持有的真实管道 |
XPROCESS_IO_NULL | 连接空设备 |
XPROCESS_IO_HANDLE | Spawn 复制借用的原生句柄 |
XPROCESS_IO_MERGE | 仅用于 stderr,连接到最终 stdout |
PIPE stdin 使用 xrtProcessWrite(),写完后必须用 xrtProcessClose(..., XPROCESS_STDIN) 发送 EOF。stdout 和 stderr 使用 xrtProcessRead();返回零表示 EOF,负数表示结构化错误。
启用 process_file 后,xrtProcessFile() 把借用的 xfile 映射为 HANDLE 配置。Spawn 在返回前复制底层句柄,不接管原文件;因此 Spawn 成功后调用方可以立即关闭文件,子进程仍持有自己的副本。
没有原生句柄的 VFS backend 返回无效 HANDLE,并保留 File 的原始错误 (例如 Unsupported 或构造错误时的 Memory),不覆盖成进程参数错误。 NULL 文件仍返回 XPROCESS_ERROR_ARGUMENT。该函数只取得借用能力,不复制 句柄、不延长文件寿命;配置到 Spawn 之前文件必须保持有效。
Process 核心不缓存输出。需要并发排空和有界结果时选择 process_run,不要在子进程可能同时大量写 stdout/stderr 时顺序读两个流。
Terminal
启用 process_terminal 后,把 Terminal 设为 true 即可使用 Windows ConPTY 或 POSIX PTY。Columns 与 Rows 的有效范围都是 1 到 32767;运行中使用 xrtProcessResize() 修改尺寸。启动前可用 xrtProcessTerminalSupported() 探测当前系统运行时能力。
Terminal 会取代三项标准流配置:父端通过 stdin 写入,通过 stdout 读取终端的统一字节流;子进程 stderr 也进入该字节流,因此 xrtProcessStreamNative(..., XPROCESS_STDERR) 返回 -1。终端输出可能包含输入回显、平台换行和程序产生的控制序列,调用方应按终端流而不是普通 stdout 文本处理。
POSIX PTY 的读端和写端共享同一个 master。普通 xrtProcessClose() 只关闭父端写描述符, 不等于向规范模式终端发送 EOF;手动交互程序应写入 EOT、发送退出命令或明确停止进程。 xrtProcessRun() 是有限输入的一次性路径,会在输入末尾补充平台规范终端 EOF 序列; Windows 的 Ctrl-Z 必须位于新行起点,因此未以换行结束的输入会先补一个终端换行。 原始/非 processed 输入模式可能把控制字符作为普通输入,程序此时应使用退出命令或 普通管道。使用 Terminal 时 stderr 合并进 Result.Stdout,Result.Stderr 为空。
一次性运行
xrtProcessRun() 同时写入可选 stdin、并发排空 stdout/stderr、等待退出并返回有界结果。默认每个输出流最多保留 16 MiB;达到上限时可选择失败、保留开头或保留结尾。
xprocessresult.InputWritten 表示 stdin 在子进程提前关闭前实际写入的字节数。基础设施成功与退出码为零是两个概念:xrtProcessRun() 的 true 只表示运行与收口成功,使用 xrtProcessResultSuccess() 判断正常零退出。
xrtProcessWaitForCancel() 在进程退出、绝对 Deadline 或取消令牌中等待第一个事件;进程退出与取消同时可见时,退出优先。超时与取消不会由该等待函数隐式停止进程。
Pipeline
xrtProcessPipeline() 先创建 N - 1 条真实 OS pipe,再启动全部阶段。中间数据不经过父进程完整缓存,天然保留流式传输和内核背压;只捕获末段 stdout。
每个 xprocessstageresult 独立拥有对应阶段的 stderr 与退出状态,不会把多个工具的诊断文本混成无法定位的一块。xprocesspipelineoutputproc 同时收到阶段索引和流标识;回调可能由多个输出线程并发调用。
xprocesspipelineoptions 的 Input 只写入首段,Deadline 与 Cancel 对全部阶段共享。捕获上限分别应用于末段 stdout 和每一段 stderr。调用结束后使用 xrtProcessPipelineResultUnit() 释放全部结果。
Pipeline 是同步捕获器:返回前收口输入/输出泵以及各阶段的私有 waiter, 不会留下尚在释放进程引用和线程上下文的退役尾部。基础 xrtProcessWait() 仍只等待终态发布,不具备该额外保证。部分启动、分配 失败和停止清理保留首个基础设施错误,不复制并覆盖该错误;失败的 setup 不获取或关闭无关父进程描述符。所有返回路径仍需调用结果 Unit。
等待与状态
xrtProcessWait():无限等待。xrtProcessWaitFor():相对毫秒数。xrtProcessWaitFor():绝对单调 Deadline。xrtProcessStatus():成功等待后复制不可变状态。
超时不会自动杀死进程。调用方可以继续等待,或依次调用 Interrupt、Terminate、KillTree。发送请求和观察退出是两个独立步骤。
xprocessstatus 的 Kind 区分退出码、POSIX 信号和平台等待失败。Stop 保存 XRT 成功发出的最高停止强度。
xrtProcessWaitAsync() 返回每个 Process 唯一的共享 Future。Future 成功值是由 Future 自身拥有的只读 xprocessstatus 快照,因此调用方可以先释放 Process,再等待或读取结果。平台等待失败时 Future 进入失败终态并保留同一结构化错误。
对该共享 Future 请求取消不会隐式停止进程,也不会替其他观察者伪造取消终态;需要停止子进程时应明确调用 Process 停止 API。启用 future_coroutine 后,同一个 Future 可以直接由 xrtFutureAwait() 等待。
生命周期
Process 使用引用计数。xrtProcessDestroy() 可以在进程运行时调用;最后一个调用方引用会关闭父端管道,内部等待引用继续回收进程。此操作不会隐式杀死子进程。
多个线程可以等待同一对象。每个输出流只允许一个并发读取者,stdin 只允许一个并发写入者;不要在 I/O 进行时从其他线程关闭同一管道。
公共类型索引
| 类型 | 用途 |
|---|
xprocesserror | xrt.process 域内的稳定错误代码。 |
xprocesstarget | 区分直接执行与显式 Shell 命令。 |
xprocessiomode | 选择标准流继承、管道、空设备、借用句柄或合并。 |
xprocessstream | 标识 stdin、stdout 或 stderr。 |
xprocessstate | 表示进程仍在运行或已经进入终态。 |
xprocessexitkind | 区分正常退出码、信号退出和等待状态丢失。 |
xprocessstop | 记录 XRT 成功发出的最高停止强度。 |
xprocessio | 保存一个标准流模式及可选借用原生句柄。 |
xprocessenv | 描述一项环境覆盖或删除操作。 |
xprocessstatus | 保存不可变退出种类、代码、信号和停止来源。 |
xprocessconfig | 保存启动目标、参数、环境、目录、终端和标准流配置。 |
xprocess | 引用计数管理的不透明进程对象。 |
xprocessoverflow | 选择捕获超限时失败、保留开头或保留结尾。 |
xprocessoutputproc | 接收 Run 产生的临时输出块。 |
xprocessrunoptions | 保存输入、Deadline、取消、停止宽限和捕获策略。 |
xprocessresult | 拥有单次运行的退出状态和两项有界输出。 |
xprocesspipelineoutputproc | 接收带阶段索引的 Pipeline 输出块。 |
xprocesspipelineoptions | 保存整条 Pipeline 的输入和收口策略。 |
xprocessstageresult | 拥有一个 Pipeline 阶段的状态和 stderr。 |
xprocesspipelineresult | 拥有全部阶段结果和末段 stdout。 |
状态与策略常量
xprocessstate:
| 常量 | 含义 |
|---|
XPROCESS_RUNNING | 进程尚未发布退出状态。 |
XPROCESS_EXITED | 退出状态已经发布并保持不变。 |
xprocessexitkind:
| 常量 | 含义 |
|---|
XPROCESS_EXIT_NONE | 尚无退出结果。 |
XPROCESS_EXIT_CODE | 正常退出,读取 Code。 |
XPROCESS_EXIT_SIGNAL | POSIX 信号退出,读取 Signal。 |
XPROCESS_EXIT_LOST | 平台等待失败,读取 Process 错误。 |
xprocessstop:
| 常量 | 含义 |
|---|
XPROCESS_STOP_NONE | XRT 没有发出停止请求。 |
XPROCESS_STOP_INTERRUPT | 已发出交互中断。 |
XPROCESS_STOP_TERMINATE | 已发出温和终止。 |
XPROCESS_STOP_KILL | 已强制结束根进程。 |
XPROCESS_STOP_KILL_TREE | 已强制结束 XRT 创建的进程组。 |
xprocessoverflow:
| 常量 | 含义 |
|---|
XPROCESS_OVERFLOW_ERROR | 捕获达到上限后以限制错误收口。 |
XPROCESS_OVERFLOW_KEEP_FIRST | 继续排空,只保留输出开头。 |
XPROCESS_OVERFLOW_KEEP_LAST | 继续排空,使用滑动窗口保留结尾。 |
XPROCESS_CAPTURE_LIMIT_DEFAULT 为 stdout 和 stderr 分别设置 16 MiB 默认捕获上限。XPROCESS_STDOUT 是 stdout 流标识;另外两项流标识 XPROCESS_STDIN 与 XPROCESS_STDERR 的读写限制见“标准流”。
辅助函数索引
| 函数 | 契约 |
|---|
xrtProcessRef() | 增加一个调用方引用;失败返回空。 |
xrtProcessState() | 返回锁保护的运行/退出状态快照。 |
xrtProcessId() | 返回跨平台无符号进程标识,失败返回零。 |
xrtProcessNative() | 返回借用的 HANDLE 或 pid,不转移所有权。 |
xrtProcessInterrupt() | 请求交互中断,不等待退出。 |
xrtProcessTerminate() | 请求温和终止并关闭 stdin,不等待退出。 |
xrtProcessKill() | 强制结束根进程,不等待退出。 |
xrtProcessKillTree() | 强制结束创建时的 Job 或进程组,不扫描系统进程表。 |
xrtProcessRunOptionsInit() | 初始化无限 Deadline、默认捕获上限和 250 ms 停止宽限。 |
xrtProcessShell() | 使用默认有界策略执行明确的 Shell 命令。 |
xrtProcessPipelineOptionsInit() | 初始化 Pipeline 的输入、等待和捕获策略。 |
xrtProcessPipelineSuccess() | 仅在全部阶段均以退出码零正常结束时返回 true。 |
xprocesserror类型
xrt.process 域错误码稳定区分配置、平台操作和资源边界。
| 值 | 语义 |
|---|
XPROCESS_ERROR_ARGUMENT | 参数非法 |
XPROCESS_ERROR_CONFIG | 配置非法 |
XPROCESS_ERROR_COMMAND | 失败 |
XPROCESS_ERROR_ENVIRONMENT | 失败 |
XPROCESS_ERROR_PIPE | 失败 |
XPROCESS_ERROR_SPAWN | 失败 |
XPROCESS_ERROR_OPEN | 失败 |
XPROCESS_ERROR_WAIT | 失败 |
XPROCESS_ERROR_READ | 读方向 |
XPROCESS_ERROR_WRITE | 写方向 |
XPROCESS_ERROR_CLOSE | 失败 |
XPROCESS_ERROR_SIGNAL | 失败 |
XPROCESS_ERROR_CALLBACK | 回调失败 |
XPROCESS_ERROR_TERMINAL | 失败 |
XPROCESS_ERROR_THREAD | 线程标识 |
XPROCESS_ERROR_LIMIT | 缓冲上限 |
typedef enum xprocesserror { XPROCESS_ERROR_ARGUMENT = 1, XPROCESS_ERROR_CONFIG, XPROCESS_ERROR_COMMAND, XPROCESS_ERROR_ENVIRONMENT, XPROCESS_ERROR_PIPE, XPROCESS_ERROR_SPAWN, XPROCESS_ERROR_OPEN, XPROCESS_ERROR_WAIT, XPROCESS_ERROR_READ, XPROCESS_ERROR_WRITE, XPROCESS_ERROR_CLOSE, XPROCESS_ERROR_SIGNAL, XPROCESS_ERROR_CALLBACK, XPROCESS_ERROR_TERMINAL, XPROCESS_ERROR_THREAD, XPROCESS_ERROR_LIMIT } xprocesserror;
xprocesstarget类型
直接执行不经过命令解释器;Shell 模式只用于明确需要解释语法的命令。
| 值 | 语义 |
|---|
XPROCESS_EXEC | 直接执行形态 |
XPROCESS_SHELL | 系统 Shell 形态 |
typedef enum xprocesstarget { XPROCESS_EXEC = 0, XPROCESS_SHELL = 1 } xprocesstarget;
xprocessiomode类型
标准流可以继承、建立父子管道、连接空设备或复制调用方原生句柄。
| 值 | 语义 |
|---|
XPROCESS_IO_INHERIT | 系统 IO 失败 |
XPROCESS_IO_PIPE | 系统 IO 失败 |
XPROCESS_IO_NULL | 空值 |
XPROCESS_IO_HANDLE | 系统 IO 失败 |
XPROCESS_IO_MERGE | 合并到另一管道(仅 STDERR 可选) |
typedef enum xprocessiomode { XPROCESS_IO_INHERIT = 0, XPROCESS_IO_PIPE, XPROCESS_IO_NULL, XPROCESS_IO_HANDLE, XPROCESS_IO_MERGE } xprocessiomode;
xprocessstream类型
标准流标识同时用于读写、关闭、原生句柄和输出回调。
| 值 | 语义 |
|---|
XPROCESS_STDIN | 标准输入流 |
XPROCESS_STDOUT | 标准输出 |
XPROCESS_STDERR | 标准错误流 |
typedef enum xprocessstream { XPROCESS_STDIN = 0, XPROCESS_STDOUT, XPROCESS_STDERR } xprocessstream;
xprocessstate类型
成功启动后的进程只有运行与退出两种公共状态。
| 值 | 语义 |
|---|
XPROCESS_RUNNING | XPROCESS运行中 |
XPROCESS_EXITED | 已退出 |
typedef enum xprocessstate { XPROCESS_RUNNING = 0, XPROCESS_EXITED = 1 } xprocessstate;
xprocessexitkind类型
正常退出、信号退出和平台等待失败保持互斥。
| 值 | 语义 |
|---|
XPROCESS_EXIT_NONE | 无 |
XPROCESS_EXIT_CODE | 退出码终态 |
XPROCESS_EXIT_SIGNAL | 信号终态 |
XPROCESS_EXIT_LOST | 退出码丢失 |
typedef enum xprocessexitkind { XPROCESS_EXIT_NONE = 0, XPROCESS_EXIT_CODE, XPROCESS_EXIT_SIGNAL, XPROCESS_EXIT_LOST } xprocessexitkind;
xprocessstop类型
停止强度逐级增加,KILL_TREE 以创建时的进程组为边界。
| 值 | 语义 |
|---|
XPROCESS_STOP_NONE | 无 |
XPROCESS_STOP_INTERRUPT | 中断(Ctrl+C/SIGINT) |
XPROCESS_STOP_TERMINATE | 温和终止 |
XPROCESS_STOP_KILL | 强制结束 |
XPROCESS_STOP_KILL_TREE | 结束进程树 |
typedef enum xprocessstop { XPROCESS_STOP_NONE = 0, XPROCESS_STOP_INTERRUPT, XPROCESS_STOP_TERMINATE, XPROCESS_STOP_KILL, XPROCESS_STOP_KILL_TREE } xprocessstop;
xprocessio类型
HANDLE 模式借用原生句柄,Spawn 在返回前完成复制,不接管调用方句柄。
| 字段 | 类型 | 语义 |
|---|
Mode | xprocessiomode | 模式 |
Handle | intptr_t | 平台句柄 |
typedef struct xprocessio { xprocessiomode Mode; intptr_t Handle; } xprocessio;
xprocessenv类型
Value 为空表示从子进程环境删除变量,非空值允许为空字符串。
| 字段 | 类型 | 语义 |
|---|
Name | cstr | 名称 |
Value | cstr | 值 |
typedef struct xprocessenv { cstr Name; cstr Value; } xprocessenv;
xprocessstatus类型
退出状态由进程对象保存,成功等待后可重复读取。
| 字段 | 类型 | 语义 |
|---|
Kind | xprocessexitkind | 错误种类 |
Code | int32 | 错误码 |
Signal | int32 | Signal |
Stop | xprocessstop | Stop |
CoreDumped | bool | CoreDumped |
typedef struct xprocessstatus { xprocessexitkind Kind; int32 Code; int32 Signal; xprocessstop Stop; bool CoreDumped; } xprocessstatus;
xprocessconfig类型
配置中的全部字符串、数组和原生句柄只借用到 Spawn 返回。 Args 不包含 argv[0];Arg0 为空时直接使用 Program。
| 字段 | 类型 | 语义 |
|---|
Target | xprocesstarget | 目标视图 |
Program | cstr | Program |
Arg0 | cstr | Arg0 |
Args | const cstr* | Args |
ArgCount | size_t | ArgCount |
Command | cstr | Command |
WorkDir | cstr | WorkDir |
Env | const xprocessenv* | Env |
EnvCount | size_t | EnvCount |
InheritEnv | bool | InheritEnv |
NewGroup | bool | NewGroup |
NewConsole | bool | NewConsole |
HideWindow | bool | HideWindow |
Terminal | bool | Terminal |
Columns | uint32 | Columns |
Rows | uint32 | Rows |
Stdin | xprocessio | Stdin |
Stdout | xprocessio | Stdout |
Stderr | xprocessio | Stderr |
typedef struct xprocessconfig { xprocesstarget Target; cstr Program; cstr Arg0; const cstr* Args; size_t ArgCount; cstr Command; cstr WorkDir; const xprocessenv* Env; size_t EnvCount; bool InheritEnv; bool NewGroup; bool NewConsole; bool HideWindow; bool Terminal; uint32 Columns; uint32 Rows; xprocessio Stdin; xprocessio Stdout; xprocessio Stderr; } xprocessconfig;
xprocessoverflow类型
捕获达到上限时可以失败、保留开头或保留结尾。
| 值 | 语义 |
|---|
XPROCESS_OVERFLOW_ERROR | 失败 |
XPROCESS_OVERFLOW_KEEP_FIRST | 溢出 |
XPROCESS_OVERFLOW_KEEP_LAST | 保留上一次 |
typedef enum xprocessoverflow { XPROCESS_OVERFLOW_ERROR = 0, XPROCESS_OVERFLOW_KEEP_FIRST, XPROCESS_OVERFLOW_KEEP_LAST } xprocessoverflow;
xprocessrunoptions类型
Run 选项把等待控制、输入、捕获边界和流式观察集中在一个稳定结构中。 Timeout 为 XRT_WAIT_FOREVER 时不超时;Cancel 只借用到 Run 返回。
| 字段 | 类型 | 语义 |
|---|
Input | xbytesview | 输入视图 |
Timeout | int64 | 相对毫秒时限;XRT_WAIT_FOREVER 表示无限等待 |
Cancel | xcancel* | 取消令牌 |
StopGrace | uint64 | StopGrace |
StdoutLimit | size_t | StdoutLimit |
StderrLimit | size_t | StderrLimit |
Overflow | xprocessoverflow | Overflow |
Output | xprocessoutputproc | 输出缓冲 |
UserData | ptr | 用户数据 |
typedef struct xprocessrunoptions { xbytesview Input; int64 Timeout; xcancel* Cancel; uint64 StopGrace; size_t StdoutLimit; size_t StderrLimit; xprocessoverflow Overflow; xprocessoutputproc Output; ptr UserData; } xprocessrunoptions;
xprocessresult类型
Run 结果拥有两个动态输出;基础设施成功不等价于子进程退出码为零。
| 字段 | 类型 | 语义 |
|---|
Status | xprocessstatus | 状态输出 |
Wait | xwaitresult | Wait |
InputWritten | size_t | InputWritten |
Stdout | bytes | Stdout |
StdoutSize | size_t | StdoutSize |
Stderr | bytes | Stderr |
StderrSize | size_t | StderrSize |
StdoutTruncated | bool | StdoutTruncated |
StderrTruncated | bool | StderrTruncated |
Duration | uint64 | Duration |
typedef struct xprocessresult { xprocessstatus Status; xwaitresult Wait; size_t InputWritten; bytes Stdout; size_t StdoutSize; bytes Stderr; size_t StderrSize; bool StdoutTruncated; bool StderrTruncated; uint64 Duration; } xprocessresult;
xprocesspipelineoptions类型
Pipeline 选项独立表达首段输入、共享等待控制和逐流捕获边界。
| 字段 | 类型 | 语义 |
|---|
Input | xbytesview | 输入视图 |
Timeout | int64 | 相对毫秒时限;XRT_WAIT_FOREVER 表示无限等待 |
Cancel | xcancel* | 取消令牌 |
StopGrace | uint64 | StopGrace |
StdoutLimit | size_t | StdoutLimit |
StderrLimit | size_t | StderrLimit |
Overflow | xprocessoverflow | Overflow |
Output | xprocesspipelineoutputproc | 输出缓冲 |
UserData | ptr | 用户数据 |
typedef struct xprocesspipelineoptions { xbytesview Input; int64 Timeout; xcancel* Cancel; uint64 StopGrace; size_t StdoutLimit; size_t StderrLimit; xprocessoverflow Overflow; xprocesspipelineoutputproc Output; ptr UserData; } xprocesspipelineoptions;
xprocessstageresult类型
每段结果独立拥有 stderr,避免跨阶段拼接后丢失错误归属。
| 字段 | 类型 | 语义 |
|---|
Status | xprocessstatus | 状态输出 |
Stderr | bytes | Stderr |
StderrSize | size_t | StderrSize |
StderrTruncated | bool | StderrTruncated |
typedef struct xprocessstageresult { xprocessstatus Status; bytes Stderr; size_t StderrSize; bool StderrTruncated; } xprocessstageresult;
xprocesspipelineresult类型
Pipeline 结果拥有全部阶段结果与末段 stdout。
| 字段 | 类型 | 语义 |
|---|
Stages | xprocessstageresult* | Stages |
StageCount | size_t | StageCount |
InputWritten | size_t | InputWritten |
Stdout | bytes | Stdout |
StdoutSize | size_t | StdoutSize |
StdoutTruncated | bool | StdoutTruncated |
Wait | xwaitresult | Wait |
Duration | uint64 | Duration |
typedef struct xprocesspipelineresult { xprocessstageresult* Stages; size_t StageCount; size_t InputWritten; bytes Stdout; size_t StdoutSize; bool StdoutTruncated; xwaitresult Wait; uint64 Duration; } xprocesspipelineresult;
xprocess类型
进程对象使用引用计数;内部等待引用保证提前释放调用方引用仍可安全回收。 不透明句柄或别名;生命周期与所有权见各使用方 API 节。
typedef struct xprocess xprocess;
xprocessoutputproc类型
输出回调借用当前读取块;stdout 与 stderr 回调可能并发执行。 回调类型;参数与返回语义见签名及各使用方 API 节。
typedef bool(*xprocessoutputproc)( xprocessstream Stream, xbytesview Data, ptr pUserData)
xprocesspipelineoutputproc类型
Pipeline 流式回调携带阶段索引;不同阶段与流可能并发调用。 回调类型;参数与返回语义见签名及各使用方 API 节。
typedef bool(*xprocesspipelineoutputproc)( size_t iStage, xprocessstream Stream, xbytesview Data, ptr pUserData)
xrtProcessConfigInit函数
初始化直接执行配置,并启用继承环境与独立进程组。
bool xrtProcessConfigInit(xprocessconfig* pConfig)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已初始化 | — |
false | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
stream · 直接执行配置
if ( !xrtProcessConfigInit(&Config) ) {
xrtProcessShellConfigInit函数
初始化系统 Shell 配置;Command 只借用到 Spawn 返回。
bool xrtProcessShellConfigInit(xprocessconfig* pConfig, cstr sCommand)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pConfig | 输出 | 非空 | 接收配置 |
sCommand | 输入 | 非空、零结尾 | Shell 命令行 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已初始化 | — |
false | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
file · Shell 配置
if ( !xrtProcessShellConfigInit(&Config, "echo redirected output") ) {
xrtProcessSpawn函数
启动子进程;失败不返回半初始化对象,详情写入当前结构化错误。
xprocess* xrtProcessSpawn(const xprocessconfig* pConfig)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pConfig | 输入 | 非空且通过校验 | 进程配置 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 非空 | 进程对象(引用 1) | — |
NULL | 启动失败 | xrt.process 域错误 |
错误xrt.process 域错误 — 启动失败:ARGUMENT(参数)、CONFIG(XERR_VALUE,配置组合)、COMMAND(程序路径)、ENVIRONMENT(XERR_VALUE,环境块)、PIPE(管道创建)、SPAWN(平台创建)
范例已编译验证
stream · 启动进程
pProcess = xrtProcessSpawn(&Config);
xrtProcessRef函数
增加进程对象引用并返回原指针。
xprocess* xrtProcessRef(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 非空 | 原指针,引用 +1 | — |
NULL | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
tour · 共享引用
pRef = xrtProcessRef(pProcess);
xrtProcessDestroy函数
释放进程对象引用;最后一个调用方引用可在进程运行时释放,此时关闭父端标准流并由内部等待者回收子进程,不隐式杀死子进程。
void xrtProcessDestroy(xprocess* pProcess)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 允许空 | 空 = 空操作 |
范例已编译验证
stream · 释放引用
xrtProcessDestroy(pProcess);
xrtProcessState函数
返回进程状态快照。
xprocessstate xrtProcessState(const xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
XPROCESS_RUNNING | 尚未退出 | — |
XPROCESS_EXITED | 已退出 | — |
错误- 无 — 快照读取不设置错误;空句柄返回
XPROCESS_RUNNING
范例已编译验证
tour · 状态快照
(xrtProcessState(pProcess) != XPROCESS_RUNNING) ||
xrtProcessId函数
返回平台进程标识,失败返回零。
uint64 xrtProcessId(const xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 非零 | 平台进程标识 | — |
0 | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
tour · 进程标识
(xrtProcessId(pProcess) == 0u) ||
xrtProcessNative函数
返回借用的原生进程句柄;POSIX 返回 pid,Windows 返回 HANDLE。
intptr_t xrtProcessNative(const xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 句柄 | 原生进程句柄借用 | — |
-1 等异常值 | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
tour · 原生句柄
(xrtProcessNative(pProcess) == 0) ||
xrtProcessStreamNative函数
返回借用的父端标准流句柄;未配置 PIPE 或已关闭时返回 -1。 该数值不是安全的 I/O 持有权;解锁后可能被并发 Close 或后台 waiter 退役并由 OS 复用。不要自行关闭它,也不要用它实现并发安全的流适配器。 应使用 xrtProcessRead / xrtProcessWrite;调用期间保持有效的 Process 引用。
intptr_t xrtProcessStreamNative(const xprocess* pProcess, xprocessstream Stream)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
Stream | 输入 | — | 标准流选择 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 句柄 | 原生流句柄借用 | — |
-1 | 未配置 PIPE 或已关闭 | 不设错 |
错误- 无句柄时返回
-1 且不设置错误;空句柄 XERR_ARGUMENT
范例已编译验证
tour · 标准流原生句柄
(xrtProcessStreamNative(pProcess,
XPROCESS_STDOUT) == 0) ) {
xrtProcessStatus函数
复制退出状态;进程尚未退出时返回 false 并设置状态错误。
bool xrtProcessStatus(const xprocess* pProcess, xprocessstatus* pStatus)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
pStatus | 输出 | 非空 | 接收状态快照 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 状态已复制 | — |
false | 尚未退出 | XERR_STATE |
错误XERR_STATE — 进程尚未退出;句柄或输出为空 XERR_ARGUMENT
范例已编译验证
tour · 退出状态
!xrtProcessStatus(pProcess, &Status) ||
xrtProcessError函数
返回进程后台等待失败的新错误引用,没有后台错误时返回空;用后 xrtErrorFree 释放。
xerror* xrtProcessError(const xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 非空 | 错误新引用 | — |
NULL | 无后台错误 | 不设错 |
错误- 无错误 — 尚无后台失败时返回
NULL 且不设置错误
范例已编译验证
tour · 后台错误
(xrtProcessError(pProcess) != NULL) ) {
xrtProcessRead函数
从 stdout 或 stderr 管道同步读取;零表示 EOF,负数表示错误。同一标准流同一时刻只允许一个读取者。 非零请求在流槽位锁下取得不可继承的操作副本,随后在锁外阻塞读取, 结束后释放副本。并发 Close 不会把此次读取重定向到复用的无关句柄。 复制失败报告 READ 错误;成功读取或 EOF 后释放失败报告 CLOSE 错误, 此时数据可能已被消耗。读取失败时保留首个原生错误,不被释放错误覆盖。
int64 xrtProcessRead(xprocess* pProcess, xprocessstream Stream, void* pData, size_t iSize)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
Stream | 输入 | STDOUT/ERR | 读取管道 |
pData | 输出 | 非空 | 接收缓冲 |
iSize | 输入 | > 0 | 缓冲容量 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
> 0 | 实际读取字节数 | — |
0 | EOF | — |
< 0 | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_READ — 读取失败(含句柄或流配置非法 XERR_ARGUMENT)
范例已编译验证
stream · 同步读取
while ( (iRead = xrtProcessRead(
pProcess,
XPROCESS_STDOUT,
pOutput,
sizeof(pOutput)
)) > 0 ) {
xrtProcessWrite函数
向 stdin 管道同步写入,返回实际写入字节数,负数表示错误。函数可能部分写入;同一时刻只允许一个写入者。 与 Read 相同,非零请求取得私有操作副本,不跨阻塞 I/O 持有 Process 锁。复制失败报告 WRITE 错误;成功写入后释放失败报告 CLOSE 错误, 此时数据可能已写入,不能假定负数意味着没有副作用或盲目重试。 写入失败保留首个原生错误。
int64 xrtProcessWrite(xprocess* pProcess, const void* pData, size_t iSize)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
pData | 输入 | 非空 | 待写入数据 |
iSize | 输入 | > 0 | 写入字节数 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
>= 0 | 实际写入字节数(可部分写入) | — |
< 0 | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_WRITE — 写入失败(含参数非法 XERR_ARGUMENT)
范例已编译验证
stream · 同步写入
if ( xrtProcessWrite(pProcess, sInput, sizeof(sInput) - 1u) <= 0 ) {
xrtProcessClose函数
关闭父进程持有的指定管道端;重复关闭成功。 Close 只退役该槽位并阻止之后的非零读写,不取消已经取得操作副本的 阻塞 I/O,也不等待这些调用结束。stdin 的最后一个操作副本释放前, 子进程可能尚未看到 EOF。需要停止阻塞调用时,应由协议结束对端或 终止子进程;不能把 Close 当作跨平台 CancelIo。调用期间保留有效 Process 引用;单读者 / 单写者约束不因此放宽。
bool xrtProcessClose(xprocess* pProcess, xprocessstream Stream)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
Stream | 输入 | — | 要关闭的流 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已关闭(或本就关闭) | — |
false | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法xrt.process / XPROCESS_ERROR_CLOSE — 平台关闭失败
范例已编译验证
stream · 关闭管道端
(void)xrtProcessClose(pProcess, XPROCESS_STDIN);
xrtProcessWait函数
等待进程退出。
xwaitresult xrtProcessWait(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
XWAIT_OK | 进程已退出,状态可读 | — |
XWAIT_TIMEOUT | 期限或截止时间先到达 | 不设错误 |
XWAIT_ERROR | 参数或等待失败 | XERR_ARGUMENT / xrt.process 域错误 |
错误XERR_ARGUMENT — 句柄为空xrt.process / XPROCESS_ERROR_WAIT — 平台等待失败
范例已编译验证
file · 无限等待
if ( xrtProcessWait(pProcess) != XWAIT_OK ) {
xrtProcessWaitFor函数
在相对毫秒数内等待进程退出。
xwaitresult xrtProcessWaitFor(xprocess* pProcess, int64 iTimeout)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
iTimeout | 输入 | — | 相对等待毫秒数 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
XWAIT_OK | 进程已退出,状态可读 | — |
XWAIT_TIMEOUT | 期限或截止时间先到达 | 不设错误 |
XWAIT_ERROR | 参数或等待失败 | XERR_ARGUMENT / xrt.process 域错误 |
错误XERR_ARGUMENT — 句柄为空xrt.process / XPROCESS_ERROR_WAIT — 平台等待失败
范例已编译验证
tour · 限时等待
if ( xrtProcessWaitFor(pProcess, 100000u) != XWAIT_TIMEOUT ) {
xrtProcessWaitForCancel函数
等待进程、Deadline 或取消令牌中的首个事件。
xwaitresult xrtProcessWaitForCancel(xprocess* pProcess, int64 iTimeout, xcancel* pCancel)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空 | 目标进程 |
iTimeout | 输入 | — | 截止时间 |
pCancel | 输入 | 允许空 | 取消令牌 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
XWAIT_OK | 进程已退出,状态可读 | — |
XWAIT_TIMEOUT | 期限先到达 | 不设错误 |
XWAIT_ERROR | 参数或等待失败 | XERR_ARGUMENT / xrt.process 域错误 |
XWAIT_CANCELLED | 取消令牌触发 | 不设错误 |
错误XERR_ARGUMENT — 句柄为空xrt.process / XPROCESS_ERROR_WAIT — 平台等待失败
范例已编译验证
tour · 可取消等待
(xrtProcessWaitForCancel(pProcess,
INT64_C(3000),
pCancel) != XWAIT_CANCELLED) ) {
xrtProcessInterrupt函数
请求控制台中断或 POSIX SIGINT,不等待进程退出。
bool xrtProcessInterrupt(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 请求已发出 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_SIGNAL — 平台信号发送失败;句柄为空 XERR_ARGUMENT
范例已编译验证
tour · 请求中断
if ( !xrtProcessInterrupt(pProcess) ) {
xrtProcessTerminate函数
请求温和终止并关闭 stdin,不等待进程退出。
bool xrtProcessTerminate(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 请求已发出 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_SIGNAL — 平台终止失败;句柄为空 XERR_ARGUMENT
范例已编译验证
tour · 温和终止
if ( !xrtProcessTerminate(pProcess) ||
!xrtProcessKill(pProcess) ||
(xrtProcessWaitFor(pProcess,
INT64_C(2000)) !=
XWAIT_OK) ) {
xrtProcessKill函数
强制结束根进程,不等待进程退出。
bool xrtProcessKill(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 请求已发出 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_SIGNAL — 平台结束失败;句柄为空 XERR_ARGUMENT
范例已编译验证
tour · 强制结束
!xrtProcessKill(pProcess) ||
xrtProcessKillTree函数
强制结束创建时进程组中的完整进程树,不等待进程退出。
bool xrtProcessKillTree(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 请求已发出 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_SIGNAL — 平台结束失败;句柄为空 XERR_ARGUMENT
范例已编译验证
tour · 结束进程树
xrtProcessKillTree(pVictim) &&
xrtProcessOpen函数
请求系统使用默认关联程序打开 UTF-8 文件路径或 URI;返回 true 只表示系统接受请求,不表示目标应用已经完成展示。
bool xrtProcessOpen(cstr sTarget)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
sTarget | 输入 | 非空、零结尾 | 文件路径或 URI |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 系统已接受请求 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_OPEN — 系统打开请求失败;参数非法 XERR_ARGUMENT
范例已编译验证
open · 默认程序打开
if ( !xrtProcessOpen(argv[1]) ) {
xrtProcessFile函数
从借用的 XRT 文件构造 HANDLE 标准流配置。
xprocessio xrtProcessFile(xfile File)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| IO 配置 | 可赋给 xprocessconfig 的流配置 | — |
| 无效配置 | 文件为空 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
file · 文件标准流
Config.Stdout = xrtProcessFile(File);
xrtProcessTerminalSupported函数
判断当前系统是否具备 ConPTY 或 POSIX PTY 支持。
bool xrtProcessTerminalSupported()
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 是支持终端 | — |
false | 不是支持终端 | — |
范例已编译验证
terminal · 终端能力
if ( !xrtProcessTerminalSupported() ) {
xrtProcessResize函数
调整 Terminal 进程窗口并通知子进程。
bool xrtProcessResize(xprocess* pProcess, uint32 iColumns, uint32 iRows)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pProcess | 输入 | 非空、Terminal 进程 | 目标进程 |
iColumns | 输入 | > 0 | 列数 |
iRows | 输入 | > 0 | 行数 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已调整并通知 | — |
false | 失败 | xrt.process 域错误 |
错误xrt.process / XPROCESS_ERROR_TERMINAL — 非终端进程或平台调整失败;句柄为空 XERR_ARGUMENT
范例已编译验证
tour · 调整终端窗口
(void)xrtProcessResize(pTerm, 120u, 30u);
xrtProcessRunOptionsInit函数
初始化有界捕获、无限等待和 250 ms 分级停止宽限。
bool xrtProcessRunOptionsInit(xprocessrunoptions* pOptions)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已初始化 | — |
false | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
tour · 运行选项
if ( !xrtProcessRunOptionsInit(&RunOptions) ||
!xrtProcessRun(&Config, &RunOptions, &Result) ||
!xrtProcessResultSuccess(&Result) ||
(Result.StdoutSize < 4u) || /* "ping\r\n" 至少 4 */
(Result.Stdout == NULL) ) {
xrtProcessResultUnit函数
释放结果持有的输出并恢复为空结果。
void xrtProcessResultUnit(xprocessresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pResult | 输入/输出 | 非空 | 目标结果 |
范例已编译验证
capture · 释放结果
xrtProcessResultUnit(&Result);
xrtProcessResultSuccess函数
判断进程是否在未超时、未取消条件下以退出码零正常结束。
bool xrtProcessResultSuccess(const xprocessresult* pResult)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 是正常零退出 | — |
false | 不是正常零退出 | — |
范例已编译验证
capture · 成功判断
bOk = xrtProcessResultSuccess(&Result);
xrtProcessRun函数
启动、并发排空 stdout/stderr、写入输入、等待并收口结果;返回 false 只表示基础设施失败,非零退出码仍返回 true。
bool xrtProcessRun(const xprocessconfig* pConfig, const xprocessrunoptions* pOptions, xprocessresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pConfig | 输入 | 非空且通过校验 | 进程配置 |
pOptions | 输入 | 允许空 | 空 = 默认选项 |
pResult | 输出 | 非空 | 接收结果 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已收口结果(含非零退出码) | — |
false | 基础设施失败 | xrt.process 域错误 |
错误xrt.process 域错误 — 启动失败:ARGUMENT(参数)、CONFIG(XERR_VALUE,配置组合)、COMMAND(程序路径)、ENVIRONMENT(XERR_VALUE,环境块)、PIPE(管道创建)、SPAWN(平台创建)xrt.process / XPROCESS_ERROR_WAIT、READ、WRITE — 收口或排空失败
范例已编译验证
tour · 一次性运行
!xrtProcessRun(&Config, &RunOptions, &Result) ||
xrtProcessCapture函数
直接执行程序并使用默认有界捕获策略。
bool xrtProcessCapture(cstr sProgram, const cstr* pArgs, size_t iArgCount, xprocessresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
sProgram | 输入 | 非空、零结尾 | 程序路径 |
pArgs | 输入 | 允许空 | 参数数组 |
iArgCount | 输入 | — | 参数数量 |
pResult | 输出 | 非空 | 接收结果 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已收口结果(含非零退出码) | — |
false | 基础设施失败 | xrt.process 域错误 |
错误xrt.process 域错误 — 启动失败:ARGUMENT(参数)、CONFIG(XERR_VALUE,配置组合)、COMMAND(程序路径)、ENVIRONMENT(XERR_VALUE,环境块)、PIPE(管道创建)、SPAWN(平台创建)xrt.process / XPROCESS_ERROR_WAIT、READ — 收口失败
范例已编译验证
tour · 直接执行捕获
if ( !xrtProcessCapture("cmd", arrArgs, 1u, &Result) ||
!xrtProcessResultSuccess(&Result) ||
(Result.StderrSize != 0u) ) {
xrtProcessShell函数
通过系统 Shell 执行命令并使用默认有界捕获策略。
bool xrtProcessShell(cstr sCommand, xprocessresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
sCommand | 输入 | 非空、零结尾 | Shell 命令行 |
pResult | 输出 | 非空 | 接收结果 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已收口结果(含非零退出码) | — |
false | 基础设施失败 | xrt.process 域错误 |
错误xrt.process 域错误 — 启动失败:ARGUMENT(参数)、CONFIG(XERR_VALUE,配置组合)、COMMAND(程序路径)、ENVIRONMENT(XERR_VALUE,环境块)、PIPE(管道创建)、SPAWN(平台创建)xrt.process / XPROCESS_ERROR_WAIT、READ — 收口失败
范例已编译验证
capture · Shell 捕获
bOk = xrtProcessShell("echo captured output", &Result);
xrtProcessPipelineOptionsInit函数
初始化 Pipeline 的有界捕获、无限等待和 250 ms 停止宽限。
bool xrtProcessPipelineOptionsInit(xprocesspipelineoptions* pOptions)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已初始化 | — |
false | 参数非法 | XERR_ARGUMENT |
错误XERR_ARGUMENT — 指针为空或参数非法
范例已编译验证
tour · Pipeline 选项
if ( !xrtProcessPipelineOptionsInit(&PipeOptions) ) {
xrtProcessPipelineResultUnit函数
释放 Pipeline 结果持有的状态数组和输出。
void xrtProcessPipelineResultUnit(xprocesspipelineresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pResult | 输入/输出 | 非空 | 目标结果 |
范例已编译验证
pipeline · 释放 Pipeline 结果
xrtProcessPipelineResultUnit(&Result);
xrtProcessPipelineSuccess函数
判断全部阶段是否都以退出码零正常结束。
bool xrtProcessPipelineSuccess(const xprocesspipelineresult* pResult)
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 是全部零退出 | — |
false | 不是全部零退出 | — |
范例已编译验证
pipeline · Pipeline 成功判断
bOk = xrtProcessPipelineSuccess(&Result);
xrtProcessPipeline函数
并发启动真实 OS 管道连接的全部阶段并按一个 Deadline 收口。
bool xrtProcessPipeline(const xprocessconfig* pStages, size_t iStageCount, const xprocesspipelineoptions* pOptions, xprocesspipelineresult* pResult)
参数
| 参数 | 方向 | 约束 | 说明 |
|---|
pStages | 输入 | 非空数组 | 各阶段配置 |
iStageCount | 输入 | > 0 且非 SIZE_MAX | 阶段数量;单阶段允许 |
pOptions | 输入 | 允许空 | 空 = 默认选项 |
pResult | 输出 | 非空 | 接收结果 |
返回值| 返回 | 含义 | 失败时状态 |
|---|
true | 已收口结果(含非零退出码) | — |
false | 基础设施失败 | xrt.process 域错误 |
错误xrt.process 域错误 — 启动失败:ARGUMENT(参数)、CONFIG(XERR_VALUE,配置组合)、COMMAND(程序路径)、ENVIRONMENT(XERR_VALUE,环境块)、PIPE(管道创建)、SPAWN(平台创建)xrt.process / XPROCESS_ERROR_PIPE — 阶段间管道连接失败xrt.process / XPROCESS_ERROR_WAIT、READ — 收口失败
范例已编译验证
pipeline · 执行 Pipeline
bOk = xrtProcessPipeline(Stages, 2u, NULL, &Result);
xrtProcessWaitAsync函数
返回以 Future 形式等待进程退出的对象;成功值是由 Future 自身拥有的只读 xprocessstatus 快照。
xfuture* xrtProcessWaitAsync(xprocess* pProcess)
返回值| 返回 | 含义 | 失败时状态 |
|---|
| 非空 | Future,失败时完成并携带错误 | — |
NULL | 创建失败 | XERR_ARGUMENT / XERR_MEMORY |
错误XERR_ARGUMENT — 指针为空或参数非法XERR_MEMORY — Future 分配失败
范例已编译验证
future · Future 等待
pFuture = xrtProcessWaitAsync(pProcess);
常量索引常量
以下常量在本页所属头文件中定义,语义见公共头注释。
| 常量 | 说明 |
| XPROCESS_CAPTURE_LIMIT_DEFAULT | 见头文件注释 |
| XPROCESS_ERROR_ARGUMENT | 见头文件注释 |
| XPROCESS_ERROR_CALLBACK | 见头文件注释 |
| XPROCESS_ERROR_CLOSE | 见头文件注释 |
| XPROCESS_ERROR_COMMAND | 见头文件注释 |
| XPROCESS_ERROR_CONFIG | 见头文件注释 |
| XPROCESS_ERROR_ENVIRONMENT | 见头文件注释 |
| XPROCESS_ERROR_LIMIT | 见头文件注释 |
| XPROCESS_ERROR_OPEN | 见头文件注释 |
| XPROCESS_ERROR_PIPE | 见头文件注释 |
| XPROCESS_ERROR_READ | 见头文件注释 |
| XPROCESS_ERROR_SIGNAL | 见头文件注释 |
| XPROCESS_ERROR_SPAWN | 见头文件注释 |
| XPROCESS_ERROR_TERMINAL | 见头文件注释 |
| XPROCESS_ERROR_THREAD | 见头文件注释 |
| XPROCESS_ERROR_WAIT | 见头文件注释 |
| XPROCESS_ERROR_WRITE | 见头文件注释 |
| XPROCESS_EXEC | 见头文件注释 |
| XPROCESS_EXITED | 见头文件注释 |
| XPROCESS_EXIT_CODE | 见头文件注释 |
| XPROCESS_EXIT_LOST | 见头文件注释 |
| XPROCESS_EXIT_NONE | 见头文件注释 |
| XPROCESS_EXIT_SIGNAL | 见头文件注释 |
| XPROCESS_IO_HANDLE | 见头文件注释 |
| XPROCESS_IO_INHERIT | 见头文件注释 |
| XPROCESS_IO_MERGE | 见头文件注释 |
| XPROCESS_IO_NULL | 见头文件注释 |
| XPROCESS_IO_PIPE | 见头文件注释 |
| XPROCESS_OVERFLOW_ERROR | 见头文件注释 |
| XPROCESS_OVERFLOW_KEEP_FIRST | 见头文件注释 |
| XPROCESS_OVERFLOW_KEEP_LAST | 见头文件注释 |
| XPROCESS_RUNNING | 见头文件注释 |
| XPROCESS_SHELL | 见头文件注释 |
| XPROCESS_STDERR | 见头文件注释 |
| XPROCESS_STDIN | 见头文件注释 |
| XPROCESS_STDOUT | 见头文件注释 |
| XPROCESS_STOP_INTERRUPT | 见头文件注释 |
| XPROCESS_STOP_KILL | 见头文件注释 |
| XPROCESS_STOP_KILL_TREE | 见头文件注释 |
| XPROCESS_STOP_NONE | 见头文件注释 |
| XPROCESS_STOP_TERMINATE | 见头文件注释 |