为什么Command :: output块的时间比它产生的子进程长?

问题描述 投票:0回答:1

我有一个程序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 projectsubprocess,但所有行为都相同。这是我第一次遇到此行为,但找不到任何文档来解决此问题。

rust multiprocessing rust-cargo
1个回答
0
投票

[考虑到@Stargateur的评论,我做了一个小小的改动,它就起作用了。所有命令通过管道传递或设置为空。Stdout,Stdin,Stderr 、。如

tokio::net::process

这可以解决阻塞问题。

编辑

经过一番探索,/ bin / bash的使用不起作用。子命令从未触发。但是Stdout,Stdin和Stderr的管道工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.