別のプロセスBを開始するプロセスAがあります。
現在、プロセスBは、プロセス「A」によってシグナルが送信されるシグナル(WaitForSingleObject)を待機してから終了し、シグナルが設定されるとプロセスBが終了します。ただし、プロセスAが予期せず終了またはクラッシュすると、プロセスBが実行されたままになります。プロセスAがクラッシュした場合を除いて、Bに信号を無期限に待機させるにはどうすればよいですか?言い換えると、..プロセスBは、プロセスAが実行されるまでのみ存続する必要があります。ありがとう
4 に答える
WaitForSingleObject
プロセス A のプロセス ハンドル。Aが死ぬと合図します。
もう 1 つの方法は、デバッガーとして B を A にアタッチすることです。次に、プロセスが終了したときにイベントを取得し、完全に同期して終了できます。
最も簡単な方法は、イベントではなくミューテックスを使用することです。プロセス A が終了すると、ミューテックスは放棄されたと見なされ、ミューテックスに対するプロセス B の待機は満たされます。
または、B にプロセス A へのハンドルを与え、イベントとプロセス A へのハンドルの両方を待機させることもできます。この方法を使用する場合、B が A へのハンドルを取得する最善の方法は継承です。プロセス A で DuplicateHandle (bInheritHandle を TRUE に設定) を使用して、GetCurrentProcess によって返された疑似ハンドルを実際のハンドルに変換します。コマンドラインまたは環境変数で、ハンドルの値をプロセス B に渡します。
を起動するときB
に、A の pid を渡しB
ますA
。これが成り立たなくなったら、終了します。
2 つのプロセス間でハートビート メッセージを送信する tcp ソケットを持つこともでき、A と B が異なるマシン上にある場所に拡張することもできます。