600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > linux共享内存 dest 关于linux 共享内存查看已经完整释放

linux共享内存 dest 关于linux 共享内存查看已经完整释放

时间:2024-05-16 04:15:02

相关推荐

linux共享内存 dest 关于linux 共享内存查看已经完整释放

完整删除共享内存脚本

#!/bin/sh

function rmshm()

{

zero_status=`ipcs -m|awk '{print $6}'|grep -w 0|wc -l`

if [ $zero_status -eq 0 ];then

echo "Warnning: not status eq 0 shmid,exitting........"

return 0

fi

get_shmid=`ipcs -m|grep -w 0|awk '{print $2}'`

for i in $get_shmid

do

get_pid=`ipcs -p|grep $i|awk '{print $4}'`

get_pids=`ps -ef|grep -v "grep"|grep $get_pid|wc -l`

if [ $get_pids -eq 0 ];then

echo "info: delete shmid $i...."

ipcrm -m $i

else

echo "info: this shmid $i use ;"

return 0

fi

done

echo "info: Delete sucess"

return 0

}

rmshm

ipcs -m:输出所有共享内存(share memory)信息

共享内存输出.png

上述各项含义如下:

key:表示共享内存的key

shmid:表示共享内存编号

owner:表示创建共享内存的用户

perms:表示共享内存的的使用权限

bytes:表示共享内存的大小

nattch:表示连接到共享内存的的进程数

status:表示共享的状态(不显示则为正常使用,显示“dest”表示共享内存已被删除,但仍有用户使用)

备注:这里简单解释一下为什么会出现“dest”这个状态

Linux下删除任何内容,都会先检查一下这个内容的引用计数(就是文件的使用数,n个进程使用,引用计数为n)。若引用计数为0,就会真正的删除该内容(这里就是删除共享内存)。不为0,表示仍有进程使用,则正在使用的进程可以正常使用,直至引用计数降为0后,系统才会将该内容真正意义上的删除掉。

对这里用共享内存来说同理,显示“dest”是表示该共享内存已经被删除但有进程还在使用它。这时操作系统将共享内存的mode标记为SHM_DEST,key标记为0x00000000,并对外显示status为“dest”。当用户调用shmctl的IPC_RMID时,系统会先查看这个共享内存的引用计数,如果引用计数为0,就会销毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。