C++线程分离进程

Posted

技术标签:

【中文标题】C++线程分离进程【英文标题】:C++ thread to separate process 【发布时间】:2010-04-11 18:59:45 【问题描述】:

有什么方法可以让线程分支到它自己的独立进程中?我知道有 CreateProcess 函数,但据我所知,您只能使用它运行外部应用程序。我所要求的有可能吗?

【问题讨论】:

【参考方案1】:

有可能。

您可以使用虚拟应用程序和 CREATE_SUSPENDED 标志调用 CreateProcess,这样它就不会立即运行。然后您可以使用 VirtualAllocEx 在创建的进程中分配内存空间,并使用 WriteProcessMemory 将代码和数据写入其中。然后取消暂停进程以运行它。

您还可以使用 CreateRemoteThread 创建在另一个现有进程的上下文中运行的进程。

所以你想做的事可能的,但是在windows环境中做这件事真的不是一件简单的事情,所以你必须有一个非常好的理由去做。

【讨论】:

【参考方案2】:

这在 Windows 下是不可能的。在 Posix 平台上,可以通过fork()ing 实现所需的效果。

【讨论】:

我相信 Cygwin 提供了一个实现,Jed Smith 给出的这个答案也比我的更有见地:***.com/questions/1814903/… Windows 内核知道如何fork(),但据我所知,这不能直接通过 Win32 接口访问。您必须使用其他 API,例如“Unix 服务”(technet.microsoft.com/en-us/library/bb496506.aspx)或 Cygwin(cygwin.com)。 亚历山大是对的。 msdn.microsoft.com/en-us/library/ms682516%28v=VS.85%29.aspx @Thomas:如果你愿意付出代价,也可以使用 Native API。 另请参阅eggheadcafe.com/software/aspnet/32040421/…,了解最近 Cygwin 实现的简短讨论。

以上是关于C++线程分离进程的主要内容,如果未能解决你的问题,请参考以下文章

并发编程

无法永远分离线程c ++

常用线程控制原语

Windows下用c++创建进程,再创建两个线程

Linux线程 | 创建 终止 回收 分离

windows下C++如何创建新进程(注意是进程不是线程)?