Как создать процесс, который не является дочерним по отношению к процессу создания? - PullRequest
3 голосов
/ 29 июня 2010

У меня есть два процесса, A и B. В некоторый момент A создает B. После создания B, если процесс A tree убит, я хочу, чтобы B все еще был рядом.

Я использую CreateProcess () для создания B, и я не могу найти способ заставить его создать процесс, не будучи дочерним. То же самое и с ShellExecuteEx (), но мне, вероятно, не хватает какого-либо флага.

Кто-нибудь знает, что я мог бы использовать для этого?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что оба процесса нуждаются в HANDLE или идентификатор процесса для другого

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Вы можете установить для параметра paramaeter dwcreationflags значение DETACHED_PROCESS в API createprocess.

1 голос
/ 29 июня 2010

Вы можете попробовать этот процесс A создать процесс C, который создаст процесс B, а затем процесс C будет немедленно завершен (завершен). В процессе B существует только информация о непосредственном родительском процессе (идентификатор процесса C, который больше не выполняется), а не о процессе A. Таким образом, «если дерево процессов A уничтожено», процесс B, вероятно, продолжит работать.

Например, вы запускаете Process Explorer (см. http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), затем запускаете Total Commander. Из Total Commander вы запускаете cmd.exe. Из cmd.exe вы запускаете notepad.exe. Затем введите «exit» в cmd. .exe. После завершения cmd.exe вы увидите, что notepad.exe больше не будет отображаться в Total Commander (totalcmd.exe). После того, как вы выберете в Process Explorer «Убить дерево процессов» для Total Commander (totalcmd.exe), вы видно, что notepad.exe продолжает работать.

...