2 つの並列プロセスを持つことができるように、コード自体から exe の新しいプロセスを作成したいと思います。
しかし、私はそれらを親子ではなく別々のプロセスにしたいと考えています。
C (Windows) でこれを行う方法はありますか?
2 つの並列プロセスを持つことができるように、コード自体から exe の新しいプロセスを作成したいと思います。
しかし、私はそれらを親子ではなく別々のプロセスにしたいと考えています。
C (Windows) でこれを行う方法はありますか?
Windows では、プロセスに親がありません。一部のツールは値を読み取りますが、どのプロセスがプロセスを開始InheritedFromUniqueProcessId
したかはわかりません。ハンドルやその他の属性がどこから継承されたかを示すだけです。ただし、実際には、この値は通常、子プロセスを開始したプロセスの ID に設定されます。
Vista 以降では、構造体を適切に入力しInheritedFromUniqueProcessId
て呼び出すことで値を変更できます。 で属性リストを作成し、 で属性を追加します。CreateProcess
STARTUPINFOEX
InitializeProcThreadAttributeList
PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
UpdateProcThreadAttribute
XP では、これを行う公式の方法はありません。NtCreateProcess
またはを使用することはできますRtlCreateUserProcess
が、これらは Win32 サブシステムを適切にセットアップしないため、プログラムが実行されない可能性があります。
ほとんどfork
の場合、新しいプロセスを実行することはWindowsに存在しません。むしろ、CreateProcess関数を使用して、Windowsにとってはるかに簡単で優れたオプションを実行できます。
「簡単な」方法は、中間コマンドを使用することです。ここで KB を参照してください。
http://support.microsoft.com/kb/315939
独立したプロセスを持つもう 1 つの方法は、2 番目のプロセスを確実にするためにハンドルを継承しないようにし、新しいプロセス グループを作成することです。独立したプロセスの作成を参照してください。
私が過去に行った醜い方法は、子プロセスを起動し、次に 2 番目の子プロセスを起動してから、最初の子プロセスを終了することです。これにより、2 番目の子は元の親との関連付けを失います。
後でこれを行うためのより良い方法を見つけたと確信していますが、見回してみて、現時点では何も見つかりません。