|
|
1
2
经过进一步的讨论,我们发现了实际的问题:您要启动的程序应该保持在前台,这样它就可以从终端读取数据(后台进程在Unix上是做不到的)。 实现这一点有两种方法。第一个也是最简单的方法是在父进程退出之前等待子进程:
这样可以确保进程(父进程和子进程)保持在前台,因为shell正在等待父进程,因此子进程可以从终端读取。
如果由于某种原因,在子进程运行时,您负担不起父进程逗留的费用,那么您需要依赖于平台的代码。在Unix上,可以使用
该函数仅在出现错误时返回。否则,进程图像将替换为新图像。从shell的角度来看,它仍然是相同的过程,因此shell将等待您启动的命令完成。
第二种方法的优势似乎微乎其微。它不能在Windows上工作,因为Windows不支持
原始答案
这或多或少是您的代码已经在做的事情。与直接从UNIX系统上的shell启动的进程有一些不同,不过:
这应该就是您的Rust代码所做的(以及在我的Linux机器上运行时所做的)。另一方面,您答案中的代码还可以执行其他操作:它使用
|
|
|
2
1
下面是Linux上的一个工作解决方案,使用包装
注:
这个
做
启动另一个程序并退出,但要注意替换当前进程意味着正确关闭了打开的资源。如果你能接受让你的程序继续运行,你可能想
|