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