Как создать процесс, который не является ребенком его создания процесса?

StackOverflow https://stackoverflow.com/questions/3136154

Вопрос

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

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

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

Редактировать: я забыл упомянуть, что оба процесса нуждаются в рукоятке или идентификатор процесса для другого

Это было полезно?

Решение

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

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

Другие советы

Вы можете установить Parameter DWCREATIONAGSS как DETACHED_PROCESS в API CreateProcess.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top