zoukankan      html  css  js  c++  java
  • 关于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

    上述各项含义如下:

    1. key:表示共享内存的key
    2. shmid:表示共享内存编号
    3. owner:表示创建共享内存的用户
    4. perms:表示共享内存的的使用权限
    5. bytes:表示共享内存的大小
    6. nattch:表示连接到共享内存的的进程数
    7. 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,如果所有进程都不用则删除这段共享内存。



    作者:blue_smile
    链接:https://www.jianshu.com/p/04ee6fae9a3d
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    oracle RAC 更换IP
    12C oracle 12.1.0.2版本打补丁
    node name配置错误,导致grid日志在报警
    input_subsys 输入子系统框架分析
    www.bing.com
    getopt函数使用说明
    FreeType 矢量字体 测试移植(1)
    字符的编码方式
    在开发板上显示字符和中文
    块设备驱动程序的框架
  • 原文地址:https://www.cnblogs.com/shiyiwen/p/8288740.html
Copyright © 2011-2022 走看看