模块契约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_READstdout、stderr 或终端读取失败。
XPROCESS_ERROR_WRITEstdin 或 Pipeline 输入写入失败。
XPROCESS_ERROR_CLOSE父端管道关闭失败。
XPROCESS_ERROR_SIGNAL中断、终止或强杀请求失败。
XPROCESS_ERROR_CALLBACK输出观察回调拒绝继续执行。
XPROCESS_ERROR_TERMINALConPTY/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_HANDLESpawn 复制借用的原生句柄
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 进行时从其他线程关闭同一管道。

公共类型索引

类型用途
xprocesserrorxrt.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_SIGNALPOSIX 信号退出,读取 Signal。
XPROCESS_EXIT_LOST平台等待失败,读取 Process 错误。

xprocessstop:

常量含义
XPROCESS_STOP_NONEXRT 没有发出停止请求。
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_RUNNINGXPROCESS运行中
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 在返回前完成复制,不接管调用方句柄。

字段类型语义
Modexprocessiomode模式
Handleintptr_t平台句柄
typedef struct xprocessio { xprocessiomode Mode; intptr_t Handle; } xprocessio;

xprocessenv类型

Value 为空表示从子进程环境删除变量,非空值允许为空字符串。

字段类型语义
Namecstr名称
Valuecstr值
typedef struct xprocessenv { cstr Name; cstr Value; } xprocessenv;

xprocessstatus类型

退出状态由进程对象保存,成功等待后可重复读取。

字段类型语义
Kindxprocessexitkind错误种类
Codeint32错误码
Signalint32Signal
StopxprocessstopStop
CoreDumpedboolCoreDumped
typedef struct xprocessstatus { xprocessexitkind Kind; int32 Code; int32 Signal; xprocessstop Stop; bool CoreDumped; } xprocessstatus;

xprocessconfig类型

配置中的全部字符串、数组和原生句柄只借用到 Spawn 返回。 Args 不包含 argv[0];Arg0 为空时直接使用 Program。

字段类型语义
Targetxprocesstarget目标视图
ProgramcstrProgram
Arg0cstrArg0
Argsconst cstr*Args
ArgCountsize_tArgCount
CommandcstrCommand
WorkDircstrWorkDir
Envconst xprocessenv*Env
EnvCountsize_tEnvCount
InheritEnvboolInheritEnv
NewGroupboolNewGroup
NewConsoleboolNewConsole
HideWindowboolHideWindow
TerminalboolTerminal
Columnsuint32Columns
Rowsuint32Rows
StdinxprocessioStdin
StdoutxprocessioStdout
StderrxprocessioStderr
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 返回。

字段类型语义
Inputxbytesview输入视图
Timeoutint64相对毫秒时限;XRT_WAIT_FOREVER 表示无限等待
Cancelxcancel*取消令牌
StopGraceuint64StopGrace
StdoutLimitsize_tStdoutLimit
StderrLimitsize_tStderrLimit
OverflowxprocessoverflowOverflow
Outputxprocessoutputproc输出缓冲
UserDataptr用户数据
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 结果拥有两个动态输出;基础设施成功不等价于子进程退出码为零。

字段类型语义
Statusxprocessstatus状态输出
WaitxwaitresultWait
InputWrittensize_tInputWritten
StdoutbytesStdout
StdoutSizesize_tStdoutSize
StderrbytesStderr
StderrSizesize_tStderrSize
StdoutTruncatedboolStdoutTruncated
StderrTruncatedboolStderrTruncated
Durationuint64Duration
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 选项独立表达首段输入、共享等待控制和逐流捕获边界。

字段类型语义
Inputxbytesview输入视图
Timeoutint64相对毫秒时限;XRT_WAIT_FOREVER 表示无限等待
Cancelxcancel*取消令牌
StopGraceuint64StopGrace
StdoutLimitsize_tStdoutLimit
StderrLimitsize_tStderrLimit
OverflowxprocessoverflowOverflow
Outputxprocesspipelineoutputproc输出缓冲
UserDataptr用户数据
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,避免跨阶段拼接后丢失错误归属。

字段类型语义
Statusxprocessstatus状态输出
StderrbytesStderr
StderrSizesize_tStderrSize
StderrTruncatedboolStderrTruncated
typedef struct xprocessstageresult { xprocessstatus Status; bytes Stderr; size_t StderrSize; bool StderrTruncated; } xprocessstageresult;

xprocesspipelineresult类型

Pipeline 结果拥有全部阶段结果与末段 stdout。

字段类型语义
Stagesxprocessstageresult*Stages
StageCountsize_tStageCount
InputWrittensize_tInputWritten
StdoutbytesStdout
StdoutSizesize_tStdoutSize
StdoutTruncatedboolStdoutTruncated
WaitxwaitresultWait
Durationuint64Duration
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
pProcess输入非空目标进程
返回值
返回含义失败时状态
非空原指针,引用 +1—
NULL参数非法XERR_ARGUMENT
错误
  • XERR_ARGUMENT — 指针为空或参数非法

范例已编译验证

tour · 共享引用

	pRef = xrtProcessRef(pProcess);

xrtProcessDestroy函数

释放进程对象引用;最后一个调用方引用可在进程运行时释放,此时关闭父端标准流并由内部等待者回收子进程,不隐式杀死子进程。

void xrtProcessDestroy(xprocess* pProcess)

参数

参数方向约束说明
pProcess输入允许空空 = 空操作
返回值
返回含义失败时状态
无引用 -1—
错误
  • 无 — 释放不失败

范例已编译验证

stream · 释放引用

		xrtProcessDestroy(pProcess);

xrtProcessState函数

返回进程状态快照。

xprocessstate xrtProcessState(const xprocess* pProcess)

参数

参数方向约束说明
pProcess输入非空目标进程
返回值
返回含义失败时状态
XPROCESS_RUNNING尚未退出—
XPROCESS_EXITED已退出—
错误
  • 无 — 快照读取不设置错误;空句柄返回 XPROCESS_RUNNING

范例已编译验证

tour · 状态快照

		(xrtProcessState(pProcess) != XPROCESS_RUNNING) ||

xrtProcessId函数

返回平台进程标识,失败返回零。

uint64 xrtProcessId(const xprocess* pProcess)

参数

参数方向约束说明
pProcess输入非空目标进程
返回值
返回含义失败时状态
非零平台进程标识—
0参数非法XERR_ARGUMENT
错误
  • XERR_ARGUMENT — 指针为空或参数非法

范例已编译验证

tour · 进程标识

		(xrtProcessId(pProcess) == 0u) ||

xrtProcessNative函数

返回借用的原生进程句柄;POSIX 返回 pid,Windows 返回 HANDLE。

intptr_t xrtProcessNative(const xprocess* pProcess)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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实际读取字节数—
0EOF—
< 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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
pProcess输入非空目标进程
返回值
返回含义失败时状态
true请求已发出—
false失败xrt.process 域错误
错误
  • xrt.process / XPROCESS_ERROR_SIGNAL — 平台信号发送失败;句柄为空 XERR_ARGUMENT

范例已编译验证

tour · 请求中断

	if ( !xrtProcessInterrupt(pProcess) ) {

xrtProcessTerminate函数

请求温和终止并关闭 stdin,不等待进程退出。

bool xrtProcessTerminate(xprocess* pProcess)

参数

参数方向约束说明
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)

参数

参数方向约束说明
pProcess输入非空目标进程
返回值
返回含义失败时状态
true请求已发出—
false失败xrt.process 域错误
错误
  • xrt.process / XPROCESS_ERROR_SIGNAL — 平台结束失败;句柄为空 XERR_ARGUMENT

范例已编译验证

tour · 强制结束

		!xrtProcessKill(pProcess) ||

xrtProcessKillTree函数

强制结束创建时进程组中的完整进程树,不等待进程退出。

bool xrtProcessKillTree(xprocess* pProcess)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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)

参数

参数方向约束说明
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见头文件注释