私はboost :: interprocessを介して別のプロセスと通信するC++アプリケーションを作成していますが、他のプロセスが実際に最初に実行されているかどうかをチェックする必要があります。他のプロセスが実行中であるかどうかを確認するにはどうすればよいですか?プロセスがC++コードから実行されているかどうかを確認するにはどうすればよいですか?
人々は、私は、特に他のプロセス
私はboost :: interprocessを介して別のプロセスと通信するC++アプリケーションを作成していますが、他のプロセスが実際に最初に実行されているかどうかをチェックする必要があります。他のプロセスが実行中であるかどうかを確認するにはどうすればよいですか?プロセスがC++コードから実行されているかどうかを確認するにはどうすればよいですか?
人々は、私は、特に他のプロセス
managed_shared_memory ctorは、(open_onlyをctorに渡したと仮定して)特定の共有メモリを開くことができない場合に備えて、interprocess_exceptionをスローします。例外のエラーコードを使用して、共有メモリが使用可能かどうかをテストできます。
すべては、リモートプロセスが実行されているが、まだ管理していない場合に発生する競合状態に悩まされているプロセスが実行中かどうか(プロセスツリーを見て、マジックログファイルなどをテストすることによって)共有メモリを設定します。
更新:あなたはしかプロセスは、オペレーティング・システムによって実行されているかどうかを確認したい場合は、プロセスのリストを歩くと、それぞれを検討する必要があります。 Hereこれを行う方法の例が見つかります。
ロックファイルを使用する方がはるかに簡単で、移植性は高くありませんが、精度の低い技術です。プロセスAは起動時にある場所に「ロックファイル」を作成し、終了時にそれを削除します。プロセスBは、このファイルの存在をテストして、プロセスAが実行中であるかどうかを判断できます。これにはヌルバイトのサイズのファイルで十分ですが、ファイルにプロセスB(プロセスAのPIDなど)に役立つ追加情報も含まれている可能性があります。しかし、ロックファイルが存在しないプロセスAの冒頭には短い時間枠がありますが、プロセスは実行中です。
ロックファイルを使用する場合、プロセスAがクラッシュしてロックファイルがハングアップしている場合は注意が必要です。 –