在Rust中,是否有一种方法可以跨平台地用新流程替换当前流程?

kb5ga3dv  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(134)

类似于linux execve(3)系统调用,我想用Rust中的一个新进程替换当前进程,以一种在Unix和Windows系统上都能工作的方式。如果必要的话,我很好使用crates,尽管我想远离unsafe
到目前为止,我在标准库中找到的唯一的东西是std::os::unix::process::CommandExt::exec,但这只适用于Unix。查找crate时,我找到了exec crate,但它似乎不支持Windows。然而,this open PR提到可以在Windows上使用wexecvp系统调用来实现相同的功能。尽管它不能在Windows运行时上工作,只能在Win32上工作。(不过,这对我来说已经足够好了。)我在如何在不打破libc::wexecvpunsafe的情况下做到这一点上陷入了死胡同。
在Rust中,是否有一种方法可以跨平台地用新流程替换当前流程?

bsxbgnwa

bsxbgnwa1#

不。Windows进程模型不是这样工作的--它不是一个 *nix。有些东西根本上是不可移植的。因此,您需要弄清楚您的功能需求是什么(例如,标准IO句柄继承等),以及如何在其他平台上实现我无法提供更具体的信息,因为您需要提供更多详细信息,说明“用另一个进程替换当前进程”对您的应用程序意味着什么(你总是可以启动另一个程序并退出,天真地听起来是一回事:-)

相关问题