man pages
のLinuxに混乱していshmctl()
ます。次のコマンドを使用します:shmctl (id , IPC_RMID , 0)
共有セグメントを削除します。記憶のman pages
寿命については矛盾しているようです。
マニュアルページには次のように記載されています。
IPC_RMID
破棄するセグメントにマークを付けます。セグメントが実際に破棄されるのは、最後のプロセスがセグメントをデタッチした後(つまり、関連する構造体shmid_dsのshm_nattchメンバーがゼロの場合)のみです。発信者は、所有者または作成者であるか、特権を持っている必要があります。セグメントに破棄のマークが付けられている場合、IPC_STATによって取得された関連データ構造のshm_perm.modeフィールドの(非標準の)SHM_DESTフラグが設定されます。
私が正しければ、これは、両方が共有メモリに接続する2つのプロセスがある場合(それらProcess1
をとと呼びましょうProcess2
)、Process1
共有メモリを作成し、接続、デタッチ、共有メモリを破棄し、最終的に終了する可能性があることを意味すると思います。その後、メモリProcess2
も切り離されるまで存在し続けます。
これは正しいです?
第二に、このステートメントはman pages
どういう意味ですか?
呼び出し元は、セグメントが最終的に破棄されることを確認する必要があります。そうしないと、障害が発生したページがメモリまたはスワップに残ります。
これによりProcess1
、セグメントに削除のマークが付けられたため、メモリが確実に削除されるように、他のすべてのプロセスがデタッチされるまでブロックする必要があるように見えます。しかし、これは上記のステートメントと矛盾しているようです。また、これがどのように行われるのか(行われることになっている場合)もわかりません。その場合、私がこれをどのように行うかについても説明していただけますか。