我有一个程序A,它使用Command::spawn
生成了一个长时间运行的进程并返回:
fn main() {
std::process::Command::new("sleep").arg("8").spawn().unwrap();
}
同时,程序B调用程序A并等待输出:
fn main() {
std::process::Command::new("target/debug/programA").output().unwrap();
}
在程序B的目录中运行cargo run
会在几微秒内返回,几乎与单独运行程序A所需的时间相同。
程序A自行花费大约200微秒,而程序B阻塞8秒钟。
我创建了a small project来显示此行为。我也曾尝试在异步环境中使用其他包装箱,例如subprocess
或tokio::net::process
,但它们的行为相同。这是我第一次遇到此行为,但找不到任何文档来解决此问题。
答案 0 :(得分:0)
因此,考虑到@Stargateur的评论,我做了一个小的更改,并使它生效。所有命令通过管道传递或设置为空。Stdout,Stdin,Stderr 、。如
fn main() {
std::process::Command::new("sleep)
.arg("8")
.stdout(Stdio::piped())
.stdin(Stdio::null())
.stderr(Stdio::null())
.spawn()
.unwrap();
}
这可以解决阻塞问题。
经过一些探索后,/ bin / bash的使用不起作用。子命令从未触发。但是Stdout,Stdin和Stderr的管道工作正常。