在C(Windows)中创建新进程和子进程的区别
我想从代码本身中创建一个新的exe进程,这样我就可以有两个并行进程 但是,我希望它们是独立的过程,而不是父子关系在C(Windows)中创建新进程和子进程的区别,c,windows,multiple-processes,C,Windows,Multiple Processes,我想从代码本身中创建一个新的exe进程,这样我就可以有两个并行进程 但是,我希望它们是独立的过程,而不是父子关系 在C(Windows)中有什么方法可以做到这一点吗?我过去做过的一个丑陋的方法是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个子对象与原始父对象失去任何关联 我确信我后来找到了一个更好的方法来实现这一点,但我四处寻找,目前找不到任何东西。很可能是fork在windows中不存在新的进程,而您可以使用函数来实现这一点,这对于windows来说是一个更简单、更
在C(Windows)中有什么方法可以做到这一点吗?我过去做过的一个丑陋的方法是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个子对象与原始父对象失去任何关联
我确信我后来找到了一个更好的方法来实现这一点,但我四处寻找,目前找不到任何东西。很可能是
fork
在windows中不存在新的进程,而您可以使用函数来实现这一点,这对于windows来说是一个更简单、更好的选择。简单的方法是使用中间命令,请参见此处的KB:
拥有独立进程的另一种方法是确保不继承句柄,以确保第二个进程成功,并创建一个新的进程组。请参见Windows中的。一些工具读取从UniqueProcessId继承的值,但这不会告诉您是哪个进程启动了您的进程。它只告诉您句柄和其他属性是从何处继承的。但是,实际上,该值通常设置为启动子进程的进程的ID
在Vista及以上版本中,您可以通过调用CreateProcess
并适当填充结构来更改InheritedFromUniqueProcessId
值:使用创建属性列表,并添加
进程\u线程\u属性\u父进程\u进程
属性
在XP上,没有官方的方法可以做到这一点。您可以尝试使用NtCreateProcess
或RtlCreateUserProcess
,但它们没有正确设置Win32子系统,因此您的程序可能无法运行。导致您出现问题的父子关系有什么问题?