2

2 つの並列プロセスを持つことができるように、コード自体から exe の新しいプロセスを作成したいと思います。

しかし、私はそれらを親子ではなく別々のプロセスにしたいと考えています。

C (Windows) でこれを行う方法はありますか?

4

4 に答える 4

6

Windows では、プロセスに親がありません。一部のツールは値を読み取りますが、どのプロセスがプロセスを開始InheritedFromUniqueProcessIdしたかはわかりません。ハンドルやその他の属性がどこから継承されたかを示すだけです。ただし、実際には、この値は通常、子プロセスを開始したプロセスの ID に設定されます。

Vista 以降では、構造体を適切に入力しInheritedFromUniqueProcessIdて呼び出すことで値を変更できます。 で属性リストを作成し、 で属性を追加します。CreateProcessSTARTUPINFOEXInitializeProcThreadAttributeList PROC_THREAD_ATTRIBUTE_PARENT_PROCESSUpdateProcThreadAttribute

XP では、これを行う公式の方法はありません。NtCreateProcessまたはを使用することはできますRtlCreateUserProcessが、これらは Win32 サブシステムを適切にセットアップしないため、プログラムが実行されない可能性があります。

于 2012-12-19T10:18:40.383 に答える
0

ほとんどforkの場合、新しいプロセスを実行することはWindowsに存在しません。むしろ、CreateProcess関数を使用して、Windowsにとってはるかに簡単で優れたオプションを実行できます。

于 2012-12-19T07:25:58.973 に答える
0

「簡単な」方法は、中間コマンドを使用することです。ここで KB を参照してください。

http://support.microsoft.com/kb/315939

独立したプロセスを持つもう 1 つの方法は、2 番目のプロセスを確実にするためにハンドルを継承しないようにし、新しいプロセス グループを作成することです。独立したプロセスの作成を参照してください。

于 2012-12-19T08:43:43.060 に答える
0

私が過去に行った醜い方法は、子プロセスを起動し、次に 2 番目の子プロセスを起動してから、最初の子プロセスを終了することです。これにより、2 番目の子は元の親との関連付けを失います。

後でこれを行うためのより良い方法を見つけたと確信していますが、見回してみて、現時点では何も見つかりません。

于 2012-12-19T07:17:14.270 に答える