作成プロセスの子ではないプロセスを作成するにはどうすればよいですか?
-
01-10-2019 - |
質問
AとBという2つのプロセスがあります。ある時点で、A は B を作成します。Bを作成した後、Aのプロセスを実行すると、 木 が殺されたとしても、私はBがまだそばにいてほしいと思っています。
CreateProcess() を使用して B を作成していますが、子にせずにプロセスを作成する方法が見つからないようです。ShellExecuteEx() でも同じですが、おそらくいくつかのフラグが欠落しています。
これを行うために何を使用できるか知っている人はいますか?
編集:言い忘れていましたが、両方のプロセスには相手に対する HANDLE またはプロセス ID が必要です。
解決
プロセス A がプロセス C を作成し、プロセス B が作成され、プロセス C がすぐに終了 (強制終了) されることを試してみてください。プロセス B には、直接の親プロセス (実行されていない C のプロセス ID) に関する情報のみが存在し、プロセス A に関する情報は存在しません。したがって、「A のプロセス ツリーが強制終了された場合」、プロセス B はおそらく実行されたままになります。
たとえば、Process Explorer を起動するとします (「 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)その後、Total Commanderを起動します。Total Commander から cmd.exe を起動します。cmd.exe から notepad.exe を起動します。次に、cmd.exe に「exit」と入力します。cmd.exe を終了すると、Total Commander (totalcmd.exe) の下に notepad.exe が表示されなくなることがわかります。Process Explorer で Total Commander (totalcmd.exe) の「プロセス ツリーの強制終了」を選択すると、notepad.exe が実行されたままであることがわかります。
他のヒント
CreateProcess APIで、Paramaeter dwcreationflagsをDetached_Processとして設定できます。