共有メモリシステムでは、2つのプロセスが共有メモリセグメントを共有しているときに1つのプロセスが終了した後、共有メモリシステムは終了したプロセスを実行している他のプロセスにどのように通知しますか?
答え1
この問題を処理する唯一の方法は、プロセス間で一種のハートビートシステムを使用することです。たとえば、最初のプロセスは共有メモリでPIDを共有できます。
その後のプロセスは、SIGUSR1のようなシグナルを送信して自分自身を知らせることができます。その後、時々ハートビートにSIGUSR2を送信することができます。 2つの不足しているSIGUSR2信号が連続して表示されると、プロセスが終了したことを知らせます。これが機能するには、シグナル送信者のPIDを渡すためにsigqueue(2)sigaction(2)を使用する必要があります。
別のアプローチは、他の共有プロセスを共有メモリにアクセスする第1のプロセスのサブプロセスとして予約することである。子供が死亡すると、自動SIGCHLDが親に送信されます。現在の共有プロセスを独立して開始しても、それを変更して新しいプロセスがメモリを共有したい最初のプロセスにシグナルを送信できます。その後、最初のプロセスは、メモリを共有したいプロセスの活動を引き継ぐために新しい子プロセスを分岐し、親/子関係を維持できます。
個人的に私は0MQ(ガイドを読むにはここに進んでください。)これを達成するためにUNIXカーネルサービスを使用する前に。共有メモリを破棄し、Memcacheを使用してデータを共有することもできます。実際、私はハートビートとIPCに0MQを使用し、Memcacheを介して共有メモリを使用して複数のプロセスを持つシステムを実装しました。
答え2
しかし、実際にはそうではありません。プロセスは、接続されている他のプロセスに関する通知なしにいつでも共有メモリセグメントに接続して分離できます。