Copyright (c) 2013-2018 brinkqiang ([email protected])
| Linux | Mac | Windows |
|---|---|---|
dmsubprocess 库提供的主要功能总结:
| 功能点 | 描述 |
|---|---|
| 执行外部命令并捕获输出 | 可运行指定命令并捕获其标准输出和标准错误输出内容。 |
| 处理命令执行失败 | 当命令执行失败时返回错误状态(ExitFailure),并提供错误输出信息。 |
| 处理不存在的命令 | 当尝试执行不存在的命令时返回错误,并在Windows和Unix系统给出相应错误信息。 |
| 信号中断处理 | 支持处理子进程/父进程的中断信号(SIGINT/SIGTERM/SIGHUP),返回ExitInterrupted状态。 |
| 控制台终端交互支持 | 可通过use_console参数让子进程继承控制台终端(验证TTY设备)。 |
| 单子进程管理 | 支持添加单个子进程并监控其执行状态,直到完成。 |
| 多子进程并发管理 | 可同时管理多个子进程(如3个并行命令),通过事件循环监控所有进程状态。 |
| 大规模子进程处理 | 支持处理超过1024个子进程(使用ppoll避免文件描述符限制)。 |
| 标准输入处理 | 子进程读取stdin时会检测到输入流已关闭(如cat -命令)。 |
| 跨平台支持 | 兼容Windows(cmd命令)和Unix-like系统(ls, kill等命令)。 |
| 状态查询接口 | 提供Done()方法检查子进程是否执行完成。 |
| 退出状态码获取 | 通过Finish()返回退出状态(ExitSuccess/ExitFailure/ExitInterrupted)。 |
| 异步事件驱动机制 | 通过DoWork()实现非阻塞的事件循环,监控子进程状态变化。 |
| 资源限制处理 | 在Unix系统自动处理文件描述符限制(通过setrlimit调整)。 |
关键实现特性:
- 使用
SubprocessSet集中管理子进程集合 - 通过轮询(
DoWork)实现异步执行监控 - 提供统一的输出捕获接口(
GetOutput()) - 支持子进程的中断信号传播和处理
- 针对大规模并发场景优化(超过1024个子进程)
