如何在Rust中将线程提升为子进程?

时间:2018-01-26 12:24:33

标签: process rust stderr

我需要编写类似于compiletest的东西。 Compiletest通过调用rustc进程并捕获stdout / stderr来工作。我的项目还没有运行二进制文件,所以我需要另一种方法来创建子进程。

我不能使用频道或stdout,因为它不受我的代码控制。

1 个答案:

答案 0 :(得分:7)

  

如何将线程提升为子进程

你做不到。这只是操作系统不做的事情;它并不特定于Rust。您无法启动任意线程,然后将其移动("将其推广到#34;)以后再转移到另一个进程;线程和进程是非常不同的概念。

  

我的项目没有可以运行的二进制文件

我建议制作一个。

如果您只想启动其他流程,可以使用std::process::Command。这将是最推荐的选择。

POSIX确实有fork调用,它复制了进程的整个内存和当前线程,所以理论上你可以用它来&# 34;促进"当前线程到新进程。

Using this in a multithreaded context can be very complicated并且默认情况下始终建议不要使用。

Support for fork on Windows is... limited, at best。如果您只关心POSIX系统,可以使用fork from the libc crate

另见:

  

捕获stdout / stderr

隐藏的,不稳定的方法,用于更改当前线程stdout / stderr。 Rust的测试框架使用这些方法。如果你有兴趣使这些稳定,你可以offer to help on the tracking issue