
一、问题情况
今天查看共享内存段发现好多共享内存段,而且命令ipcrm -m <shmid>删除不了。
回想了一下,应该是有一些程序跑while循环,或者死循环,不让进程结束,只要挂接数(nattch)还不为0,说明共享内存还被占用,所以无法删除,但是以dest作为标记,表明只要进程结束,就会自动删除共享内存。

二、解决方法
2.1 通过kill命令删除
通过ipcs -mp查看一些对应的创建者PID。然后Kill -9即可。

来看看kill之后的结果,确实可以删掉。

除了直接查看pid命令,我们也可以通过代码进行获取:
struct shmid_ds结构体原型,shm_cpid是创建共享内存时的pid,shm_lpid是最后一次使用这个共享内存进程的id。所以可以通过构建声明一个结构体类型的shmid_ds保存共享内存的信息。

#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main()
{
int res;
int id[7] =


1781

被折叠的 条评论
为什么被折叠?



