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

kdy*_*kdy 0 process stderr rust

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

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

She*_*ter 7

如何将线程提升为子进程

你不能.这只是操作系统不能做的事情 ; 它并不特定于Rust.您无法启动任意线程,然后将其("提升它")移动到其他进程; 线程和进程是非常不同的概念.

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

我建议制作一个.


如果您希望简单地启动另一个过程,您可以使用std::process::Command它.这将是最推荐的选择.

POSIX确实有fork调用,它复制了进程和当前线程的整个内存,因此理论上你可以使用它来"提升"当前线程到新进程.

在多线程上下文中使用它可能非常复杂,并且默认情况下基本上始终建议不要使用它.

forkWindows上的支持最多也是有限的.如果您只关心POSIX系统,可以使用forklibc crate.

也可以看看:


捕获stdout/stderr

还有改变当前线程隐藏的,不稳定的方法stdout/ stderr.Rust的测试框架使用这些方法.如果你有兴趣使这些稳定,你可以提供帮助跟踪问题.