Expand description
用于处理进程的模块。
该模块主要与产生和与子进程交互有关,但是它也提供了 abort
和 exit
来中止当前进程。
产生一个进程
Command
结构体用于配置和 spawn 进程:
use std::process::Command;
let output = Command::new("echo")
.arg("Hello world")
.output()
.expect("Failed to execute command");
assert_eq!(b"Hello world\n", output.stdout.as_slice());
RunCommand
上的几种方法 (例如 spawn
或 output
) 可用于 spawn 进程。
特别是,output
生成子进程并等待直到该进程终止,而 spawn
将返回代表生成的子进程的 Child
。
处理 I/O
可以通过将 Stdio
传递给 Command
上的相应方法来配置子进程的 stdout
,stdin
和 stderr
。
生成后,可以从 Child
访问它们。
例如,可以将一个命令的输出管道输送到另一命令,如下所示:
use std::process::{Command, Stdio};
// stdout 必须配置 `Stdio::piped` 才能使用 `echo_child.stdout`
//
let echo_child = Command::new("echo")
.arg("Oh no, a tpyo!")
.stdout(Stdio::piped())
.spawn()
.expect("Failed to start echo process");
// 请注意,`echo_child` 已移到此处,但我们不再需要 `echo_child`
//
let echo_out = echo_child.stdout.expect("Failed to open echo stdout");
let mut sed_child = Command::new("sed")
.arg("s/tpyo/typo/")
.stdin(Stdio::from(echo_out))
.stdout(Stdio::piped())
.spawn()
.expect("Failed to start sed process");
let output = sed_child.wait_with_output().expect("Failed to wait on sed");
assert_eq!(b"Oh no, a typo!\n", output.stdout.as_slice());
Run请注意,ChildStderr
和 ChildStdout
实现 Read
,而 ChildStdin
实现 Write
:
use std::process::{Command, Stdio};
use std::io::Write;
let mut child = Command::new("/bin/cat")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.expect("failed to execute child");
// 如果子进程填充了其 stdout 缓冲区,则它可能最终会等待,直到父进程读取 stdout,并且在此期间无法读取 stdin,从而导致死锁。
//
// 从另一个线程进行写入可确保同时读取 stdout,从而避免了该问题。
//
//
let mut stdin = child.stdin.take().expect("failed to get stdin");
std::thread::spawn(move || {
stdin.write_all(b"test").expect("failed to write to stdin");
});
let output = child
.wait_with_output()
.expect("failed to wait on child");
assert_eq!(b"test", output.stdout.as_slice());
RunStructs
- ExitStatusErrorExperimental描述进程失败后的结果
- 表示正在运行或退出的子进程。
- 子进程的 stderr 的句柄。
- 子进程的标准输入 (stdin) 的句柄。
- 子进程的标准输出 (stdout) 的句柄。
- 进程生成器,提供对如何生成新进程的细粒度控制。
- 命令的迭代器。
- 命令环境变量上的迭代器。
- 该类型表示当前进程在正常终止下可以返回其父进程的状态码。
- 描述进程终止后的结果。
- 完成的进程的输出。
Traits
- 一个 trait,用于在
main
函数中实现任意的返回类型。
Functions
- 以异常方式终止进程。
- 使用指定的退出代码终止当前进程。
- 返回与此进程关联的操作系统分配的进程标识符。