IPC:共有メモリー終了プロセス通知

IPC:共有メモリー終了プロセス通知

共有メモリシステムでは、2つのプロセスが共有メモリセグメントを共有しているときに1つのプロセスが終了した後、共有メモリシステムは終了したプロセスを実行している他のプロセスにどのように通知しますか?

ベストアンサー1

この問題を処理する唯一の方法は、プロセス間で一種のハートビートシステムを使用することです。たとえば、最初のプロセスは共有メモリでPIDを共有できます。

その後のプロセスは、SIGUSR1のようなシグナルを送信して自分自身を知らせることができます。その後、時々ハートビートにSIGUSR2を送信することができます。 2つの不足しているSIGUSR2信号が連続して表示されると、プロセスが終了したことを知らせます。これが機能するには、シグナル送信者のPIDを渡すためにsigqueue(2)sigaction(2)を使用する必要があります。

別のアプローチは、他の共有プロセスを共有メモリにアクセスする第1のプロセスのサブプロセスとして予約することである。子供が死亡すると、自動SIGCHLDが親に送信されます。現在の共有プロセスを独立して開始しても、それを変更して新しいプロセスがメモリを共有したい最初のプロセスにシグナルを送信できます。その後、最初のプロセスは、メモリを共有したいプロセスの活動を引き継ぐために新しい子プロセスを分岐し、親/子関係を維持できます。

個人的に私は0MQ(ガイドを読むにはここに進んでください。)これを達成するためにUNIXカーネルサービスを使用する前に。共有メモリを破棄し、Memcacheを使用してデータを共有することもできます。実際、私はハートビートとIPCに0MQを使用し、Memcacheを介して共有メモリを使用して複数のプロセスを持つシステムを実装しました。

おすすめ記事