2009-08-24 18 views
2

私はboost :: interprocessを介して別のプロセスと通信するC++アプリケーションを作成していますが、他のプロセスが実際に最初に実行されているかどうかをチェックする必要があります。他のプロセスが実行中であるかどうかを確認するにはどうすればよいですか?プロセスがC++コードから実行されているかどうかを確認するにはどうすればよいですか?

人々は、私は、特に他のプロセス

答えて

2

managed_shared_memory ctorは、(open_onlyをctorに渡したと仮定して)特定の共有メモリを開くことができない場合に備えて、interprocess_exceptionをスローします。例外のエラーコードを使用して、共有メモリが使用可能かどうかをテストできます。

すべては、リモートプロセスが実行されているが、まだ管理していない場合に発生する競合状態に悩まされているプロセスが実行中かどうか(プロセスツリーを見て、マジックログファイルなどをテストすることによって)共有メモリを設定します。

更新:あなたはしかプロセスは、オペレーティング・システムによって実行されているかどうかを確認したい場合は、プロセスのリストを歩くと、それぞれを検討する必要があります。 Hereこれを行う方法の例が見つかります。

ロックファイルを使用する方がはるかに簡単で、移植性は高くありませんが、精度の低い技術です。プロセスAは起動時にある場所に「ロックファイル」を作成し、終了時にそれを削除します。プロセスBは、このファイルの存在をテストして、プロセスAが実行中であるかどうかを判断できます。これにはヌルバイトのサイズのファイルで十分ですが、ファイルにプロセスB(プロセスAのPIDなど)に役立つ追加情報も含まれている可能性があります。しかし、ロックファイルが存在しないプロセスAの冒頭には短い時間枠がありますが、プロセスは実行中です。

+0

ロックファイルを使用する場合、プロセスAがクラッシュしてロックファイルがハングアップしている場合は注意が必要です。 –

1

あなたがミューテックスを使用したり、共有メモリのファイルを開いて、例外を処理しようとすることができますいずれかをチェックするために必要としています。

+0

はい、実行中のプロセス – Maciek

+0

@Mを確認する必要があります。 Utku:ミューテックスは、それらを開いたアプリケーションが閉じると通常は解放されるため、両方のアプリケーションを制御すると正常です。つまり、どちらのアプリケーションも動作していると仮定して、Frerichのソリューションが好きです。 – Brian

関連する問題