一、进程
指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
二、进程间的通信
- 早期传统的unix进程间通信方式
- AT&T的贝尔实验室,对Unix早期的进程间通信进行了改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内
- BSD(加州大学伯克利分校的伯克利软件发布中心),跳过了该限制,形成了基于套接(socket)的进程间通信机制
三、进程间通信的特点
无名管道(pipe):具有亲缘(父子/兄弟)关系的进程间通信,半双工的,数据是在内存中
有名管道(fifo):可用于任意进程间通信,半双工的,有文件名,数据是在内存中.
信号(signal):唯一的异步通信方式
消息队列(msg):常用于c/s模式,全双工的,按消息类型访问,
共享内存(shm):效率最高(直接访问内存),需要同步和互斥
信号量(sem):一般和共享内存配合使用,用来实现同步与互斥
三、传统的unix通信方式
1.无名管道
1.无名管道的特点:
(1).只能用于具有亲缘关系的进程间通信方式(父子进程/兄弟进程)
(2).是一个半双工的通信方式,具有固定的读端和写端
(3).管道可以看成一个特殊的文件,对于它的读写可以使用普通的read(),write()函数,但是它不属于任何文件系统,并且只存在内存中。
2.无名管道创建函数
2.有名管道
1.有名管道特点:
有名管道(FIFO)对无名管道的改进
(1).它可以使互不相关的两个进程实现彼此的通信
(2).该管道可以通过文件名来指出,并且在文件系统中可见.在建立管道之后,两个进程可以把管道文件当做普通文件来读写操作,(open,read/write,close)
(3).FIFO严格遵循先进先出
- 有名管道的创建
3.信号:
信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。
1.硬件产生
Ctrl+c -----SIGINT
Ctrl+z -----SIGTSTP
Ctrl+\ -----SIGQUIT
2.内核发送
- alarm()和pause()
- alarm()也称为闹钟函数,它可以在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALRM信号。
- pause()函数是用于将调用进程挂起直到收到信号为止。
3.软件发送
- 信号的处理
SIGKILL ----9
SIGSTOP ----19
该两个是不能做处理。
- 默认处理
- 忽略处理
3.捕获处理