gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:22:06 25 4
gpt4 key购买 nike

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

我不能使用 channel 或标准输出,因为它不受我的代码控制。

最佳答案

How can I promote a thread to child process

你不能。这只是操作系统不会的事情;它不是 Rust 特有的。您不能启动任意线程,然后稍后将其移动(“提升”)到另一个进程;线程和进程是截然不同的概念。

My project does not have a binary to run yet

我建议做一个。


如果你只想启动另一个进程,你可以使用std::process::Command为了那个原因。这将是最推荐的选项。

POSIX 确实有 fork调用,它会复制进程的整个内存和当前线程,因此理论上您可以使用它来将当前线程“提升”到新进程。

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 .

另见:


capturing stdout/stderr

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

关于process - 如何在 Rust 中将线程提升为子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com