2010-04-11 64 views
1

有沒有什麼辦法可以讓一個線程分支進入它自己的獨立進程?我知道有CreateProcess函數,但據我所知,您只能使用它運行外部應用程序。我一直在要求什麼?C++線程來分離進程

回答

3

這在Windows下是不可能的。在Posix平臺上,預期的效果可以通過fork()獲得。

+0

'fork()'不能在Windows上工作嗎? – sbi 2010-04-11 19:03:45

+1

我相信Cygwin提供了一個實現,同樣由Jed Smith給出的答案比我的更具有洞察力:http://stackoverflow.com/questions/1814903/running-fork2-from-windows-with-cygwin-possible – 2010-04-11 19:05:46

+1

The Windows內核知道如何「fork()」,但據我所知,這不能通過Win32接口直接訪問。您必須使用其他API,例如「Services for Unix」(http://technet.microsoft.com/en-us/library/bb496506.aspx)或Cygwin(http://www.cygwin.com/)。 – 2010-04-11 19:08:31

3

這是可能的。

您可以使用虛擬應用程序和CREATE_SUSPENDED標誌調用CreateProcess,以免它立即運行。然後,您可以使用VirtualAllocEx在創建的進程中分配內存空間,並使用WriteProcessMemory將代碼和數據寫入其中。然後取消暫停過程來運行它。

您也可以使用CreateRemoteThread創建在另一個現有進程的上下文中運行的進程。

所以你想要做什麼可能,但在Windows環境下做真的不是一件簡單的事情,所以你必須有一個很好的理由才能做到這一點。