
Linux进程通信
文章平均质量分 87
D.•
这个作者很懒,什么都没留下…
展开
-
Linux进程间通信:信号量(sem)
举例:如果一个公共厕所有3个坑位,p1进来后就剩下2个坑位,当p2和p3进来后,此时剩下0个坑位。当p4在进来,坑位就为-1个,p5在进来,坑位就为-2个。那么坑位(信号量)就会执行P操作,把p4和p5放在等待队列中。当p1完事离开后,坑位(信号量)就执行V操作,将p4放入原p1的坑位,此时的坑位数就位-1,只有p5还在等待队列。以次内推,当p1p2p3p4p5全部完事后,坑位数量又重新为3。(新增一个进程,信号量+1;释放一个进程,信号量-1),这样就可以通过信号量有效的管理和分配资源。原创 2023-01-27 21:12:57 · 1339 阅读 · 1 评论 -
Linux进程间通信:信号(signal)
在Linux中,①信号可以简单理解为软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。②信号也是进程间通信的一种方式,也是如此,进程才能收到信号指令,完成操作。:查询系统中的信号。原创 2023-01-27 11:12:26 · 1740 阅读 · 0 评论 -
Linux进程间通信:消息队列(msg)
是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流;消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构;向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点;消息队列提供从一个进程向另外一个进程发送一块数据的方法;消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限。原创 2023-01-25 10:49:56 · 1964 阅读 · 0 评论 -
Linux进程间通信:共享内存(shm)
比如:在一家餐厅中,有编号为a b c d e五张桌子,张三约了小美在c号桌一起吃饭,那么小美赴约直接到c号桌与张三共同用餐。如果张三和小美没有协议好在c桌用餐,那么他们就可能不会在同一张做桌子上吃饭,就完成不了这次约会。原创 2023-01-23 20:58:59 · 2374 阅读 · 0 评论 -
Linux进程间通信:无名管道(pipe),有名管道(fifo)
进程与进程在应用层里面不能直接进行信息交互,必须通过内核来进行通信。创建一个管道作为进程间信息交互的媒介,所以进程A就可以在管道中写入数据,进程B在从管道中读取数据,这样就可以实现进程A与进程B之间的通信①只适用于带有亲缘关系的进程,比如父子进程;如果进程间没有任何关系,就不能使用无名管道。②只能实现一个进程写另一个进程读,而如果需要两者同时进行时,就得重新打开一个管道。①可以实现没有任何亲缘关系的进程间的通信,因为有名管道在使用前必须创建一个特殊文件名(mkfifo)来承接进程间的读和写;原创 2023-01-19 19:07:00 · 659 阅读 · 1 评论