當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。