本文简要介绍rust语言中 Struct std::process::Child
的用法。
用法
pub struct Child {
pub stdin: Option<ChildStdin>,
pub stdout: Option<ChildStdout>,
pub stderr: Option<ChildStderr>,
// some fields omitted
}
表示正在运行或已退出的子进程。
该结构用于表示和管理子进程。子进程是通过 Command
结构创建的,该结构配置生成进程,并且本身可以使用builder-style 接口构造。
没有为子进程实现 Drop
,因此如果您不确保Child
已退出,那么它将继续运行,即使在子进程的Child
句柄已超出范围之后也是如此。
调用 wait
(或其他环绕它的函数)将使父进程等到子进程实际退出后再继续。
警告
在某些系统上,调用 wait
或类似方法是操作系统释放资源所必需的。已终止但尚未等待的进程仍以“zombie” 的形式存在。留下太多的僵尸可能会耗尽全局资源(例如进程 ID)。
标准库做了不是自动等待子进程(即使Child
被删除),这取决于应用程序开发人员是否这样做。结果,下降Child
不建议在 long-running 应用程序中直接处理而不先等待它们。
例子
use std::process::Command;
let mut child = Command::new("/bin/cat")
.arg("file.txt")
.spawn()
.expect("failed to execute child");
let ecode = child.wait()
.expect("failed to wait on child");
assert!(ecode.success());
字段
stdin: Option<ChildStdin>
用于写入子标准输入 (stdin) 的句柄,如果它已被捕获。为了避免部分移动 child
并因此在使用 child
时阻止自己调用函数 stdin
,您可能会发现它很有帮助:
let stdin = child.stdin.take().unwrap();
stdout: Option<ChildStdout>
从子标准输出 (stdout) 读取的句柄,如果它已被捕获。您可能会发现这样做很有帮助
let stdout = child.stdout.take().unwrap();
避免部分移动 child
并因此阻止自己在使用 stdout
时调用 child
上的函数。
stderr: Option<ChildStderr>
从子标准错误 (stderr) 中读取的句柄,如果它已被捕获。您可能会发现这样做很有帮助
let stderr = child.stderr.take().unwrap();
避免部分移动 child
并因此阻止自己在使用 stderr
时调用 child
上的函数。
相关用法
- Rust Child.wait用法及代码示例
- Rust Child.wait_with_output用法及代码示例
- Rust Child.kill用法及代码示例
- Rust Child.id用法及代码示例
- Rust Child.try_wait用法及代码示例
- Rust Chars.as_str用法及代码示例
- Rust Chain.get_ref用法及代码示例
- Rust Chain.get_mut用法及代码示例
- Rust ChunksExact用法及代码示例
- Rust Chain用法及代码示例
- Rust CharIndices.offset用法及代码示例
- Rust Chunks用法及代码示例
- Rust ChunksMut用法及代码示例
- Rust ChunksExactMut用法及代码示例
- Rust Chain.into_inner用法及代码示例
- Rust CStr.into_c_string用法及代码示例
- Rust Cursor.new用法及代码示例
- Rust Condvar.notify_all用法及代码示例
- Rust Cursor.remaining_slice用法及代码示例
- Rust Command.args用法及代码示例
- Rust Condvar.wait用法及代码示例
- Rust CString.into_bytes用法及代码示例
- Rust CStr.from_bytes_with_nul用法及代码示例
- Rust Cow.is_owned用法及代码示例
- Rust Cow用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::process::Child。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。