我在shmctl上编写了一个包装函数来销毁共享内存段。我只需要确保优雅地删除段。所以写下面的代码行。但我想知道为什么0的shmid是无效值,我们需要abort()?
shmctl_wrap( int shmid, int cmd, shmid_ds buf)
{
if( cmd == IPC_RMID && shmid == 0 && buf->shm_nattch != 0)
abort();
rc = shmctl( shmid, cmd, buf);
return rc;
}
但是我的系统在一些我无法调试的特殊情况下中止。不确定我的包装是否符合此目的。
我需要知道的是
如果shmid不是有效值,那么我会看到已使用该值创建的段
ipcs -m
------共享内存段--------
密钥shmid所有者perms字节nattch状态
0x0001ff07 0 root 666 632004 73
0x00000000 32769 root 0 512 0
0x00008000 65538 root 0 430044 41
0x00000000 196611 root 666 8136 2
0x00008001 131076 root 42 430044 41
0x00008002 229381 root 775 430044 1
0x00008003 262150 root 336 430044 1