进程间通信与ipcs使用7例
进程间通信(IPC, inter-process communication)实现进程间消息的传递,对于用户地址空间相互独立的两个进程而言,实现通信可以通过以下方式:
- 由内核层面分配内存,两进程共享该段内存
- 两进程读/写同一磁盘文件,通过文件内容实现通信
Linux提供了以下具体方法:
- 管道(pipes):一个进程可通过管道向另一个进程传递消息,不同机器上的进程可通过命名管道相互通信
- 共享内存(shared memory):进程可通过共享内存交换数据,一个进程负责创建共享内存,其他进程可以连接该块内存
- 消息队列(message queue):由队列结构管理的内存块,其中内存块中放置进程数据
- 信号(semaphores):在进程访问共享资源时,信号提供同步机制,其不负责传递其他信息
ipcs是Unix/Linux中的一个用于显示进程间通信信息的命令,其可列出进程间的共享内存、消息队列、信号信息,下面是ipcs的具体用法。
1.列出ipc列表
使用 -a 选项将列出所有ipc信息:
# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2 ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204 ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
以上列出了进程间共享内存、信号和消息队列,注意每种 ipc 以 key 和 id 进行标识。-m选项单独列出共享内存信息,-s选项单独列出信号信息,-q选项单独列出消息队列信息。
2.显示ipc信息详情
使用 -i 选项可以显示某 id 的ipc信息详情,如以下显示shmid为65537的共享内存详情:
# ipcs -m -i 65537 Shared memory Segment shmid=65537 uid=1000 gid=100 cuid=1000 cgid=100 mode=01600 access_perms=0600 bytes=393216 lpid=3406 cpid=3400 nattch=2 att_time=Mon Apr 8 13:45:50 2013 det_time=Mon Apr 8 13:45:50 2013 change_time=Mon Apr 8 13:45:50 2013
3.查看ipc限制
内核对各种ipc有一些限制,例如最大的共享内存块数,每块共享内存最大/最小值,使用 -l 选项可显示这些限制:
# ipcs -m -l ------ Shared Memory Limits -------- max number of segments = max seg size (kbytes) = max total shared memory (kbytes) = min seg size (bytes) =
直接使用 ipcs -l 可查看到对三种ipc的限制。
4.显示ipc创建者与拥有者详情
-c 选项可以显示ipc创建者和ipc拥有者的 userid、groupid:
# ipcs -m -c ------ Shared Memory Segment Creators/Owners -------- shmid perms cuid cgid uid gid root root root root lx users lx users lx users lx users
5.显示最近访问ipc的进程pid
-p 选项可以显示哪些进程最近访问了某类ipc:
# ipcs -m -p ------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid root lx
6.显示最近访问时间点
-t 选项显示对ipc最近的操作或连接时间点,对不同的ipc有不同的含义:
- 对于消息队列, -t 显示最近接收和发送时间点
- 对于共享内存,-t 显示最近开始访问和结束访问时间点
- 对于信号,-t 显示最近操作和信号变更时间点
# ipcs -s -t ------ Semaphore Operation/Change Times -------- semid owner last-op last-changed lx Mon Apr :: Mon Apr ::
7.显示当前使用状态
使用 -u 选项可以显示ipc当前使用状况:
# ipcs -u ------ Shared Memory Status -------- segments allocated pages allocated pages resident pages swapped Swap performance: attempts successes ------ Semaphore Status -------- used arrays = allocated semaphores = ------ Messages: Status -------- allocated queues = used headers = used space = bytes
Reference: 10 IPCS Command Examples (With IPC Introduction)
进程间通信与ipcs使用7例的更多相关文章
- 一起talk C栗子吧(第九十 三回:C语言实例--进程间通信之临界资源)
各位看官们.大家好,前面章回中咱们说的是使用信号和管道进行进程间通信的样例.这一回咱们说的样例是:进程间通信之临界资源.闲话休提,言归正转.让我们一起talk C栗子吧! 我们首先介绍一下,什么是临界 ...
- Linux工具参考篇(网摘)
Linux工具参考篇 原文出处:[Linux Tools Quick Tutorial] 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆文件 4. ps 进程查看器 5. ...
- 进程间通信 ipcs
在linux系统上借助ipcs命令可以方便地查看进程间通信状态 操作系统:centos7.3 x86_64 应用软件: oracle12c
- Linux进程间通信 共享内存+信号量+简单样例
每个进程都有着自己独立的地址空间,比方程序之前申请了一块内存.当调用fork函数之后.父进程和子进程所使用的是不同的内存. 因此进程间的通信,不像线程间通信那么简单.可是共享内存编程接口能够让一个进程 ...
- 运维ps语法---》ps、pstree、top、htop、nice、renice、kill、ulimit、w 和 who 和 whoami、pgrep、fg 和 bg、ipcs
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 进程间通信之-共享内存Shared Memory--linux内核剖析(十一)
共享内存 共享内存是进程间通信中最简单的方式之中的一个. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存同意两个或很多其他进程訪问同一块内存,就如同 malloc() 函数 ...
- Linux系统编程——进程间通信:共享内存
概述 url=MdyPihmS_tWLwgWL5CMzaTrwDFHu6euAJJUAjKvlzbJmRw7RfhmkBWwAloo7Y65hLY-kQdHsbqWYP2wc2fk8yq"& ...
- Linux命令:ipcs/ipcrm命令
ipcs/ipcrm命令 是linux/uinx上提供关于一些进程间通信方式的信息,包括共享内存,消息队列,信号 多进程间通信常用的技术手段包括共享内存.消息队列.信号量等等,Linux系统下自带的 ...
- 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...
随机推荐
- 详解FIX协议的原理、消息格式及配置开发
一.定义 FIX协议是由国际FIX协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程,在各类参与者之间,包括投资经理.经纪人,买方.卖方建立起实时的电子化通讯协议.FIX协议的目标是把各类证 ...
- Visual Studio中Es6的开发环境搭建
1.打开终端,输入初始化代码.输入代码之后会在目录中出现package.json,可以在红色下划线上写上作者名和描述(不写也可以) npm init -y 2.安装Babel转换器 npm in ...
- Python线程池ThreadPoolExecutor源码分析
在学习concurrent库时遇到了一些问题,后来搞清楚了,这里记录一下 先看个例子: import time from concurrent.futures import ThreadPoolExe ...
- idea环境下push项目
1,选中需要推送的项目: 2,VCS-git-add 添加到本地仓库 3,vcs-commit 提交 4.commit and push 推送到远程仓库 出现错误这是提示程序有错误或者是TODO代码没 ...
- 新手上路——it人如何保持竞争力
新手上路——如何保持竞争力 JINGZHENGLI 套用葛大爷的一句名言:21世纪什么最贵,人才.哪你是人才还是人材?还是人财或人裁?相信大家都不是最后一种.何如保持住这个光环呢?就需要我们保持我们独 ...
- linux字符设备驱动--基本知识介绍
一.设备驱动的分类 1.字符设备 字符设备是指那些能一个字节一个字节读取数据的设备,如LED灯.键盘.鼠标等.字符设备一般需要在驱动层实现open().close().read().write().i ...
- Android 开发感想
18年从.net转行做安卓开发,现在已经过去一年多了.说一下感想和心得体会! 一.开始 说一下我的经厉,从毕业开始出来工作一直是从事.net方向的开发工作.一开始也是没什么经验,加上也没有其他手艺就找 ...
- 【SpringCloud】Ribbon如何自定义客户端配置和全局配置
起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...
- 个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格
PPT和WORD的世界,充满着排版的美化操作,在Excel世界同样也需要对表格.图表的美化,此篇带你进入真正的制表专家行列,使用Excel催化剂的格式管理增强功能加上对美感的艺术造诣,对Excel表格 ...
- [leetcode] 87. Scramble String (Hard)
题意: 判断两个字符串是否互为Scramble字符串,而互为Scramble字符串的定义: 字符串看作是父节点,从字符串某一处切开,生成的两个子串分别是父串的左右子树,再对切开生成的两个子串继续切开, ...