进程间的通信⽅式

进程间的通信方式

1.信号signal
信号是系统为响应某些条件产生的一个事件。接收到该信号的进程可以采取事先定义的行为。
信号来源
1.硬件来源:比如按下ctrl+c,除0等。
2.软件来源:比如kill命令等。
进程如何发送信号:
1.使用系统调用将信号放入目标进程信号队列中。
2.目标进程处于未执行状态,该信号就由内核保存起来,直到进程恢复执行并传递给它为止。如果信号被进程设置为阻塞,则该信号的传递被延迟,知道其阻塞被取消时传递给进程。
进程如何接收信号:
1.把接收到的信息放入信号队列中。
2.执行的进程会在特定时刻检查处理信号队列。
2.信号量 Semaphore
信号量是一种特殊的变量,对它的操作都是原子的,有两种操作:V(signal())和P(wait()), v操作会增加信号量s的数值,p会减少它。
3.管道 Pipe
管道是一种半双工的通信方式,数据只能单向流动,如果要双向流动,需要建立两个管道。管道适合传输大量信息,传输内容是没有格式的字节流。
4.命名管道 FIFO
命名管道可⽤于任何有访问权的进程通过⽂件名将其打开和进⾏读写。Pipe 和 FIFO 除了建⽴、打开、
删除的⽅式不同外,⼆者⼏乎⼀模⼀样。
5. 消息队列 Message Queue
消息队列是消息组成的链表,保存在内核中。消息队列中的消息是一个具有特定格式的数据块。操作系统可以存在多个消息队列,每个队列有唯一的key进行标识。
6. 共享内存 Shared Memory
共享内存允许多个进程映射同一段物理空间,然后像访问普通内存一样访问它,并交换数据。
7. 套接字 Socket
不同的计算机的进程之间通过 socket 通信,也可⽤于同⼀台计算机的不同进程。需要通信的进程之间
⾸先要各⾃创建⼀个 socket,内容包括主机地址与端口号。进程通过 socket 把消息发送到⽹络层中,
⽹络层通过主机地址将其发到⽬的主机,⽬的主机通过端口号发给对应进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值