进程的通信

管道
什么是管道

由于进程之间是相互独立的,因此在进程与进程之间进行相互联系的时候,此时就需要采用一种机制,通过管道的方式将进程一个进程的执行数据交给另外一个进程,此时就可以以通过管道来实现

匿名管道和命名管道

匿名管道
创建一个匿名管道的方式是pipe(int pipe[2])
要创建一个匿名管道,此时两个管道之间必须有父子关系,同时匿名管道对数据的读取是基于流的方式实现的,,同时为了使得进程之间的资源能够正确访问,此时就需要采用一种机制使得进程之间的既可以正常访问资源,这样的机制就是同步机制.管道是基于父子关系的进程之间的,此时管道的生命周期就会随进程.同时管道是单向的,这就像家里自来水管中的额数一样,它只有一个方向的流动.管道读端关闭,写端还一直在写此时会触发SIGPIP信号,当写端已经不再继续写了,但是读端还在一直进行读操作,此时进程会读到0,当写入的数据小于管道规定的数据的长度的时候,此时系统会保证数据的原子写入,当写入的数据大于管道的最大规定的字节数的时候,此时就不会再进行写操作.
命名管道:
命名管道是基于mkfifo,通过mkfifo创建的管道存在于磁盘中,命名管道和匿名管道之间的区别在于两者之间的打开方式不同,命名管道是通过open来打开,但是匿名管道是通过创建就会打开

消息队列

虽然进程进通信已经有管道了,但是管道只能基于有血缘关系的进程之间进行通信,为了实现任何进程之间的通信,此时就引入了消息队列.其中消息队列时基于一个一个的数据块的,同时数据块是由类型的,数据块也是由规定的做大长度的,系统中的消息队列的长度也是有限制的,发送者在进行发送的时候此时就需要将数据的类型进行标记,接收者在进行接受的时候就可以通过这个类型来直到这个数据是否来自发送方.

共享内存

没有血缘关系的进程之间的通信虽然可以利用消息队列完成,但是在创建消息队列的时候,此时必须先将两个进程之间通过消息队列的类型来确认此时接受的消息是否正确,这样势必会造成两个进程之间的通信效率会降低,此时为了使得两个进程之间能够高效的进行通信,就提出了共享内存.共享内存是通过一段共享内存,将两个进程关联到这块内存,此时两个进程已经都关联到这块内存中,因此只要一个进程向这块内存中发送数据,此时另外一个进程就会看到这个消息,因此消息队列是块的IPC形式

信号量

信号量实际就是一个计数器,技术器中的数值代表的是当前资源的多少.

几个命令

查看消息队列:
ipcs -q
删除消息队列:
ipcrm -q
查看共享内存:
ipcs -m
删除共享内存:
ipcrm -m

进程的退出码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值