子プロセスのPIDを取得する方法はありますか?つまり、CreateProcessを使用してcmdプロンプトを開くと、返されたProcessInformation構造から取得できるため、そのPIDがわかります。しかし、このコマンドプロンプトから開かれたプロセスのPIDも取得することは可能ですか?
ありがとう!
CreateToolhelp32Snapshot
値を渡す関数を使用してメソッドTH32CS_SNAPPROCESS
を呼び出し、Process32First
最後に返されたコレクションを反復処理して、th32ParentProcessID
フィールドの値を cmd.exe の PID と比較する必要があります。もう 1 つのオプションはWin32_Process
、プロパティを使用して WMI クラスを使用しParentProcessId
、結果をフィルタリングすることです。
CreateJobObjectを使用してジョブを作成し、SetInformationJobObjectを使用してジョブを I/O 完了ポートに関連付けます。詳細については、 JOBOBJECT_ASSOCIATE_COMPLETION_PORTを参照してください。AssignProcessToJobObjectCREATE_SUSPENDED
を使用してプロセスを作成し、新しいプロセスをジョブの一部にします。
プロセスIDが表示されるまでに新しい孫プロセスがすでに終了している場合があり、そのプロセスを再利用できることに注意してください。OpenProcessを使用して孫プロセスへのハンドルを取得する場合は、エラーを適切に処理していることを確認してください。ハンドルを正常に開いた場合は、IsProcessInJobを呼び出して、ハンドルが実際に孫プロセスの 1 つを指していることを確認してください。
Windows 8/2012 より前ではプロセスをネストできないためCREATE_BREAKAWAY_FROM_JOB
、子プロセスを作成するときにフラグを使用する必要がある場合があります。