当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Child用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 Struct std::process::Child。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。