IPC

来源:互联网 发布:java erp系统开发 编辑:程序博客网 时间:2024/05/17 02:20

进程间通信IPC,也就是Inter-Process Communication的缩写。

首先我们明白一个进程其实就是一个狭义上的程序。


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

1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;

2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;

3、通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;

4、资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;

5、进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变

   进程由于是内核(OS kernel)的功能,因此进程的创建和通信其实和各种OS紧密相关的。当然现在OS在架构上有很多思想是想通的,所以进程间通信在各种操作系统上有不同也有相同的地方。

POSIX信号量来源于POSIX技术规范的实时扩展方案(POSIX Realtime Extension),常用于线程;
头文件为semaphore.h,函数调用为sem_init(),sem_wait(),sem_post(),sem_destory()等等

system v信号量,常用于进程的同步。这两者非常相近,但它们使用的函数调用各不相同。
头文件为<sys/sem.h>,函数调用为semctl(),semget(),semop()等函数。

由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Unix和流行版本都是遵循POSIX标准的。

一般来说,linux下的进程包含以下几个关键要素:

  • 有一段可执行程序;
  • 有专用的系统堆栈空间;
  • 内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进程才能接受内核的调度;
  • 具有独立的存储空间

Linux进程间通信由以下几部分发展而来:

早期UNIX进程间通信:包括管道、FIFO、信号。

基于System V的进程间通信:包括System V消息队列、System V信号灯(Semaphore)、System V共享内存。

基于Socket进程间通信。

基于POSIX进程间通信:包括POSIX消息队列、POSIX信号灯、POSIX共享内存。

Linux中,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)、

具体的用法总结如下:

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指令,所以在编写跨平台的脚本时,需要注意这个问题。







0 0
原创粉丝点击