Linux ipcs 命令详解

来源:互联网 发布:五五开这个人 知乎 编辑:程序博客网 时间:2024/05/18 02:05

程序员必备!!!
在unix/linux下,经常有因为共享内存、信号量,队列等共享信息没有干净地清楚而引起一些问题,ipcs默认会列出共享内存、信号量,队列信息,-m列出共享内存,-s列出共享信号量,-q列出共享队列。

[root@localhost ~]# ipcs

—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x71a7d46c 0 oracle 640 169869312 34

—— Semaphore Arrays ——–
key semid owner perms nsems
0x9c7e9a74 98304 oracle 640 154

—— Message Queues ——–
key msqid owner perms used-bytes messages
0x0000231e 0 gaps 666 0 0

ipcs [-mqs] [-abcopt] [-C core] [-N namelist]
-a : 显示当前系统中共享内存段、信号量集、消息队列的使用情况;
-q:显示活动的消息队列信息;
-m:显示活动的共享内存信息;
-s:显示活动的信号量信息。

-a 使用时:
-b 写入消息队列的队列上消息的最大字节数、共享内存段的大小、每个信号量集中信号量的数量。
-c 写入构建该设施的用户的登录名和组名称。
-o 写以下的使用信息:

队列上的消息数
消息队列上消息的总字节数
连接在共享内存段上的进程数

-p 写进程编号的信息:

最后接收消息队列上消息的进程号
最后在消息队列上发送消息的进程号
创建进程的进程号
最后一个连接或拆离共享内存段的进程编号

-t 写入时间信息:

最后一次更改所有设备访问许可权的控制操作的时间
消息队列上最后一次执行 msgsnd 和 msgrcv 的时间
共享内存上最后一次执行 shmat 和 shmdt 的时间
在信号量集上最后一次执行 semop 的时间

-C CoreFile 用由 CoreFile 参数指定的文件来代替 /dev/mem 文件。CoreFile 参数是由 Ctrl-(left)Alt-Pad1 按键顺序创建的内存映象文件。
-N Kernel 用指定的 Kernel( /usr/lib/boot/unix 文件是缺省的)。

注意:
如果用户指定 -C 或者 -N 标记,实型和有效的 UID/GID 设置为调用 ipcs 的用户的实型 UID/GID。当运行 ipcs 时可以更改值;仅当检索它时它给出的信息才保证是正确的。

清除命令是ipcrm [-m|-s|-q] semid
-m 删除共享内存
-s删除共享信号量
-q删除共享队列。

相关知识:
信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况;共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。在Linux系统下 ,常用的方式是通过shmXXX函数族来实现利用共享内存进行存储的。如Shmget,类似于 malloc函数。

0 0