我需要编写类似于compiletest的东西。 Compiletest通过调用rustc
进程并捕获stdout / stderr来工作。我的项目还没有运行二进制文件,所以我需要另一种方法来创建子进程。
我不能使用频道或stdout,因为它不受我的代码控制。
答案 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。