2012-12-19 62 views
2

我想從代碼本身創建一個exe的新進程,以便我可以有兩個並行進程。在C中創建新進程和子進程的區別(Windows)

但是,我想讓他們成爲獨立的進程而不是父子。

有沒有辦法在C(Windows)中做到這一點?

+2

導致您問題的親子關係有什麼問題? –

回答

3

在Windows中,processes don't have parents。有些工具讀取InheritedFromUniqueProcessId值,但這並不告訴你哪個進程開始你的進程。它只會告訴你句柄和其他屬性是從哪裏繼承的。但實際上,這個值通常設置爲啓動子進程的進程的ID。

在Vista及以上的,可以通過調用CreateProcessSTARTUPINFOEX結構填寫適當地改變InheritedFromUniqueProcessId值:與InitializeProcThreadAttributeList創建一個屬性列表,並與UpdateProcThreadAttribute添加 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS屬性。

在XP上,沒有官方的做法。您可以嘗試使用NtCreateProcessRtlCreateUserProcess,但這些不會正確設置Win32子系統,因此您的程序可能無法運行。

0

我過去做過的一種醜陋的方式是啓動一個子進程,然後啓動第二個子進程,然後第一個子進程退出。這會導致第二個孩子失去與原始父母的任何關聯。

我確定我後來找到了一個更好的方法來做到這一點,但我四處尋找,目前找不到任何東西。

0

最有可能的fork在窗口中不存在新的進程,而您可以使用CreateProcess函數來做到這一點,這是更容易和更好的Windows選項。