4

適切なフラグを使用して共有メモリとセマフォを開きます。

sem = sem_open("/some_name", O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO, 1);
shm = shm_open("/other_name", O_RDWR | O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO);

呼び出しは失敗しません(私はそれらをチェックします)。実際、他のプロセスがそれらを作成しforkexec他のプロセスがメモリとセマフォを共有し、適切な同期が行われている1つのプロセス。

ただし、コマンドを使用するとipcs、共有メモリもセマフォも表示されません。何故ですか?が表示されない場合ipcs、どこで確認できますか?


私のipcs出力では、セマフォ配列リストにエントリがなく、共有メモリ内のエントリは、skype、firefox、および(firefoxの)plugin-containerに関連しています。私はそれらをチェックしました

grep shmid /proc/*/maps     # observe pid
readlink /proc/pid/exe
4

3 に答える 3

3

私が見つけた解決策の1つは、共有メモリと共有セマフォが以下にリストされていることでした。

/dev/shm

そこにあるファイルは、共有オブジェクトが何であるか、そしておそらくunlinkそれらにどのような共有オブジェクトがあるかを知るのに役立ちますが、それ以上の有用な情報は提供しません(そうですipcs)。

于 2013-03-27T14:23:38.457 に答える
3

IpcsはSystemV共有メモリのみを報告します。Posix共有メモリを使用している必要があります。どうやらこれらは2つの完全に異なるメカニズムです。Posixshmは/dev/shmの下に表示されます。

私は同じ問題を抱えていましたが、なぜこれが起こっているのかを説明していないため、受け入れられた答えは十分に満足のいくものではありません。私は別の同様の質問で答えを見つけました: 私はシェルコマンドipcsを介してboost::interprocessによって作成された共有メモリを見ることができません

「私が知る限り、ipcsはSystem V共有メモリのみを報告します。POSIX共有メモリは別の領域であり、個別に照会する必要があります。Linuxシステムでは、/ dev/shmを確認してください。」

于 2020-08-14T10:03:05.753 に答える
0

私の場合、解決策はsudoを使用することでした:

sudo ipcs -m
于 2020-04-13T20:56:10.127 に答える