我想用 Rust 编写以下内容。我不知道如何使用 Command API 执行此操作。
if [[ -z "${DEPLOY_ENV}" ]]; then
$old_program "$@"
else
$new_program "$@"
fi
最佳答案
Command
API是跨平台的,并不是所有平台都有exec和fork的概念。但是,标准库确实提供了 exec()
通过 std::os::unix::process::CommandExt
扩展特征在 Unix 平台上执行 Command
的方法。
use std::process::Command;
use std::os::unix::process::CommandExt;
fn main() {
let args: Vec<_> = std::env::args_os().skip(1).collect();
let err = Command::new("new_program")
.args(&args)
.exec();
println!("Error: {}", err);
}
或者,您可以使用 fork crate :
use fork::{fork, Fork};
fn main() {
// keeps the same arguments of course
match fork() {
Ok(Fork::Parent(child)) => println!("Continuing execution in parent process, new child has pid: {}", child),
Ok(Fork::Child) => println!("I'm a new child process"),
Err(_) => println!("Fork failed"),
}
}
或exec crate :
use exec::Command;
fn main() {
let args: Vec<_> = std::env::args_os().skip(1).collect();
let err = Command::new("new_program")
.args(&args)
.exec();
println!("Error: {}", err);
}
关于rust - 如何在 Rust 中 fork/exec 转发所有参数的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65969353/