【发布时间】:2016-12-15 14:21:03
【问题描述】:
是否可以将正在运行的进程与其控制台分离并将该控制台的所有权交还给父进程?
也就是说,我希望从cmd.exe 开始的进程将自己与控制台分离(即关闭控制台不会杀死进程)并继续在后台运行,同时控制标准输入、输出和错误流返回给cmd.exe,以便用户可以继续运行命令。
本质上,我正在尝试大致近似在 Linux 上调用 fork 的外观。
我目前正在做:
#include <windows.h>
int main() {
FreeConsole();
Sleep(10000);
return 0;
}
即使控制台窗口关闭,这也会使进程保持活动状态,但标准流的控制权不会交还给cmd.exe,直到睡眠超时并且进程终止。
编辑:该功能是跨平台库的一部分,可以从用户代码中的任意点调用,因此将应用程序重构为更多 Windows-y、调用外部命令、重新启动进程(或启动两步启动序列中另一个父进程的进程)、创建 Windows 服务等不幸的是不是可行的解决方案。
【问题讨论】:
-
尝试用
START /B program运行你的进程 -
将 CREATE_NEW_CONSOLE 传递给 CreateProcess
-
我试图实现的
fork-ish 函数是库的一部分,几乎可以出现在客户端代码中的任何位置。因此,通过外部命令或CreateProcess重新启动进程是不可行的。 -
您可能需要更灵活一些。在 Windows 上实现 fork 是不可行的。
-
确实它不可行,这就是为什么我试图弄清楚是否有可能近似它的这一特定方面。如果事实证明这是不可能的,那么这也是该问题的有效答案。