4

動機付けに興味がある場合は、次の数文で詳しく説明しますが、Q にスキップするだけではありません.

私は高速ロガーを作成することを考えていましたが、プログラムがクラッシュしても影響を受けないものです (最後のログメッセージが失われることはありません)。したがって、私の考えは、共有メモリ(リングバッファ)に書き込み、そこから別の優先度の低いプロセスを読み取ってダンプを実行することです。しかし、それが機能するには、1つのプロセスが終了した場合(通常の終了、SEGFAULT)に共有メモリがどうなるかを知る必要があります...

だから私の質問は次のとおりです。procsの1つが死ぬと、共有メモリはどうなりますか(Linuxでは、しかしA for Winも可能です)?UBですか?

4

3 に答える 3

6

プロシージャの1つが停止すると、共有メモリはどうなりますか(Linuxの場合、A for Winも可能です)。

何もない。プロセスが停止すると、共有メモリはそのままになります。ディレクトリの下にファイルとしてマップされます/dev/shm/。これは、システムが再起動したとき、またはすべてのプロセスが共有メモリファイルのマップを解除して呼び出されたときに削除されますshm_unlink()

UBですか?

いいえ、明確に定義されています。shm_overview(7)のマニュアルページを参照してください。

POSIX共有メモリオブジェクトにはカーネルの永続性があります。共有メモリオブジェクトは、システムがシャットダウンされるまで、またはすべてのプロセスがオブジェクトのマッピングを解除してshm_unlink(3)で削除されるまで存在します。

于 2013-02-26T12:30:26.817 に答える
4

ブースト IPC メカニズムを読んでください。共有メモリに関する永続性の概念が説明されています。

http://www.boost.org/doc/libs/1_53_0/doc/html/interprocess/some_basic_explanations.html#interprocess.some_basic_explanations.persistence

于 2013-02-26T13:38:12.410 に答える
1

のバッキングとしてファイルを使用する場合mmap、最後の までのすべてmsync、またはmunmapプロセスが正常に終了した場合は、独立したプロセスで使用できます。

したがって、プロセスがクラッシュしても、共有メモリに問題はありません。

于 2013-02-26T12:32:20.137 に答える