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