我想從代碼本身創建一個exe的新進程,以便我可以有兩個並行進程。在C中創建新進程和子進程的區別(Windows)
但是,我想讓他們成爲獨立的進程而不是父子。
有沒有辦法在C(Windows)中做到這一點?
我想從代碼本身創建一個exe的新進程,以便我可以有兩個並行進程。在C中創建新進程和子進程的區別(Windows)
但是,我想讓他們成爲獨立的進程而不是父子。
有沒有辦法在C(Windows)中做到這一點?
在Windows中,processes don't have parents。有些工具讀取InheritedFromUniqueProcessId
值,但這並不告訴你哪個進程開始你的進程。它只會告訴你句柄和其他屬性是從哪裏繼承的。但實際上,這個值通常設置爲啓動子進程的進程的ID。
在Vista及以上的,可以通過調用CreateProcess
與STARTUPINFOEX
結構填寫適當地改變InheritedFromUniqueProcessId
值:與InitializeProcThreadAttributeList
創建一個屬性列表,並與UpdateProcThreadAttribute
添加 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
屬性。
在XP上,沒有官方的做法。您可以嘗試使用NtCreateProcess
或RtlCreateUserProcess
,但這些不會正確設置Win32子系統,因此您的程序可能無法運行。
我過去做過的一種醜陋的方式是啓動一個子進程,然後啓動第二個子進程,然後第一個子進程退出。這會導致第二個孩子失去與原始父母的任何關聯。
我確定我後來找到了一個更好的方法來做到這一點,但我四處尋找,目前找不到任何東西。
最有可能的fork
在窗口中不存在新的進程,而您可以使用CreateProcess函數來做到這一點,這是更容易和更好的Windows選項。
「易」的方法是使用一箇中間命令,請參閱知識庫這裏:
http://support.microsoft.com/kb/315939
另一種方式擁有獨立的進程是確保不繼承句柄確保第二進程,並創建一個新的流程組。請參閱Creating independent process!
導致您問題的親子關係有什麼問題? –