Linux的IPC命令

进程间通信概述
进程间通信有如下的目的:

  1. 数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;
  2. 共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;
  3. 通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;
  4. 资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;
  5. 进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

Linux进程间通信由以下几部分发展而来:
早期UNIX进程间通信:包括管道、FIFO、信号。
基于System V的进程间通信:包括System V消息队列、System V信号灯(Semaphore)、System V共享内存。
基于Socket进程间通信。
基于POSIX进程间通信:包括POSIX消息队列、POSIX信号灯、POSIX共享内存。

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

例如在CentOS6.0上执行ipcs

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

1
# ipcs -a

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

1
# ipcs -q

3、显示所有的信号量

1
# ipcs -s

4、显示所有的共享内存

1
# ipcs -m

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

1
# ipcs -q -i id

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

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

1
# ipcs -m -l

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

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

1
2
3
4
# ipcs -c
# ipcs -m -c
# ipcs -q -c
# ipcs -s -c

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

1
2
3
# ipcs -p
# ipcs -m -p
# ipcs -q -p

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

1
2
3
4
# ipcs -t
# ipcs -q -t
# ipcs -m -t
# ipcs -s -t

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

1
# ipcs -u

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

参考资料:
1、Linux下IPCS的用法详解
2、Linux进程间通信
3、Linux下IPCS的10种用法
4、Linux IPC小结
5、Linux IPC总结

cocowool

A FULL STACK DREAMER!