• Linux共享内存的管理


    在进程通信应用中会用到共享内存,这就涉及到了IPC,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)。IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道,系统进行进程间通信(IPC)的时候,可用的方式包括信号量、共享内存、消息队列、管道、信号(signal)、套接字等形式[2]。使用IPCS可以查看共享内存、信号量、消息队列的状态。

    当下系统是Centos,执行ipcs命令查看

    说明:

    • 第一列就是共享内存的key;
    • 第二列是共享内存的编号shmid;
    • 第三列就是创建的用户owner;
    • 第四列就是权限perms;
    • 第五列为创建的大小bytes;
    • 第六列为连接到共享内存的进程数nattach;
    • 第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为 SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销 毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。

    具体的用法总结如下:
    1、显示所有的IPC设施

    # ipcs -a

    2、显示所有的消息队列Message Queue

    # ipcs -q

    3、显示所有的信号量

    # ipcs -s

    4、显示所有的共享内存

    # ipcs -m

    5、显示IPC设施的详细信息

    # ipcs -q -i id

    id 对应shmid、semid、msgid等。-q对应设施的类型(队列),查看信号量详细情况使用-s,查看共享内存使用-m。

    6、显示IPC设施的限制大小

    # ipcs -m -l

    -m对应设施类型,可选参数包括-q、-m、-s。

    7、显示IPC设施的权限关系

    # ipcs -c
    # ipcs -m -c
    # ipcs -q -c
    # ipcs -s -c

    8、显示最近访问过IPC设施的进程ID。

    # ipcs -p
    # ipcs -m -p
    # ipcs -q -p

    9、显示IPC设施的最后操作时间

    # ipcs -t
    # ipcs -q -t
    # ipcs -m -t
    # ipcs -s -t

    10、显示IPC设施的当前状态

    # ipcs -u

    Linux上的ipcs命令,不支持UNIX上的-b、-o指令,同样UNIX中不支持-l、-u指令,所以在编写跨平台的脚本时,需要注意这个问题。

    删除IPC

    ipcrm -m| -q| -s shm_id

    例如,我们在以0x12345678为KEY创建了一个共享内存,可以直接使用ipcrm -M 0x12345678来删除共享内存区域。

    下面的命令可以释放所有已分配的共享内存:

    ipcs -m | awk '$2 ~ /[0-9]+/ {print $2}' | while read s; do sudo ipcrm -m $s; done
  • 相关阅读:
    Floydtemplate 示例
    dfa hdu 2222 AC自动机示例
    oj 中的 G++ 与 C++ 的区别
    System.Diagnostics.Process.Start(Info)
    自动关闭messagebox
    获取外部程序进程的SQL语句
    php 阿拉伯数字转中文数字 方法
    最新jQuery CHM版中文帮助文档
    parent.myFrame.cols ff 子窗体取得(访问)父窗体中另一子窗体的ID
    Jquery JS 正确的比较两个数字大小的方法
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9151029.html
Copyright © 2020-2023  润新知