Как создать процесс, который не является ребенком его создания процесса?
-
01-10-2019 - |
Вопрос
У меня есть два процесса, 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.