Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C(Windows)中创建新进程和子进程的区别_C_Windows_Multiple Processes - Fatal编程技术网

在C(Windows)中创建新进程和子进程的区别

在C(Windows)中创建新进程和子进程的区别,c,windows,multiple-processes,C,Windows,Multiple Processes,我想从代码本身中创建一个新的exe进程,这样我就可以有两个并行进程 但是,我希望它们是独立的过程,而不是父子关系 在C(Windows)中有什么方法可以做到这一点吗?我过去做过的一个丑陋的方法是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个子对象与原始父对象失去任何关联 我确信我后来找到了一个更好的方法来实现这一点,但我四处寻找,目前找不到任何东西。很可能是fork在windows中不存在新的进程,而您可以使用函数来实现这一点,这对于windows来说是一个更简单、更

我想从代码本身中创建一个新的exe进程,这样我就可以有两个并行进程

但是,我希望它们是独立的过程,而不是父子关系


在C(Windows)中有什么方法可以做到这一点吗?

我过去做过的一个丑陋的方法是启动一个子进程,然后启动第二个子进程,然后第一个子进程退出。这会导致第二个子对象与原始父对象失去任何关联


我确信我后来找到了一个更好的方法来实现这一点,但我四处寻找,目前找不到任何东西。

很可能是
fork
在windows中不存在新的进程,而您可以使用函数来实现这一点,这对于windows来说是一个更简单、更好的选择。

简单的方法是使用中间命令,请参见此处的KB:

拥有独立进程的另一种方法是确保不继承句柄,以确保第二个进程成功,并创建一个新的进程组。请参见Windows中的。一些工具读取从UniqueProcessId继承的
值,但这不会告诉您是哪个进程启动了您的进程。它只告诉您句柄和其他属性是从何处继承的。但是,实际上,该值通常设置为启动子进程的进程的ID

在Vista及以上版本中,您可以通过调用
CreateProcess
并适当填充结构来更改
InheritedFromUniqueProcessId
值:使用创建属性列表,并添加

进程\u线程\u属性\u父进程\u进程
属性


在XP上,没有官方的方法可以做到这一点。您可以尝试使用
NtCreateProcess
RtlCreateUserProcess
,但它们没有正确设置Win32子系统,因此您的程序可能无法运行。

导致您出现问题的父子关系有什么问题?