linux内核多种进程间通信机制
1.管道通信:無名管道和有名管道
(1)管道(無名管道)
1.管道通信的原理:內核維護的一塊內存,有讀端和寫端(管道是單向通信的)
2.管道通信的方法:父進程創建管理后fork子進程,子進程繼承父進程的管道fd
3.管道通信的限制:只能在父子進程間通信、半雙工
4.管道通信的函數:pipe、write、read、close
(2)有名管道(fifo)
1.有名管道的原理:實質也是內核維護的一塊內存,表現形式為一個有名字的文件
2.有名管道的使用方法:固定一個文件名,2個進程分別使用mkfifo創建fifo文件,然后分別open打開獲取到fd,然后一個讀一個寫
3.管道通信限制:半雙工(注意不限父子進程,任意2個進程都可)
4.管道通信的函數:mkfifo、open、write、read、close
2.SystemV IPC(Inter-Process Communication 進程間通信):信號量、消息隊列、共享內存 ?
IPC:Inter-Process Communication 進程間通信,兩個任意進程之間的通信,實質也是內核提供的公共內存,系統通過一些專用API來提供SystemV IPC功能
| msg | message (queue) | 消息隊列 |
| sem | semaphore | 信號量 |
| shm | shared memory | 共享內存 |
(1)消息隊列
1.本質上是一個隊列,隊列可以理解為(內核維護的一個)FIFO
2.工作時A和B 2個進程進行通信,A向隊列中放入消息,B從隊列中讀出消息。
(2)信號量(通過判斷信信號量的值,相當于一個鎖)
1.實質就是個計數器(其實就是一個可以用來計數的變量,可以理解為int a)
2.通過計數值來提供互斥和同步
(3)共享內存
1.大片內存直接映射
2.類似于LCD顯示時的顯存用法
例子:
視頻編解碼就是運用共享內存加信號量的方法使得AB進程間相互通信
? ? ? ? ? ?信號量
A進程----------->B進程
| ?|
|--共享內存--|
假設信號量初始值s=1,A進程往共享內存傳輸數據,傳輸完成后把s值置為0,b進程觀測到s為0后,開始從共享內存讀取數據,讀取完成后s置為1,在這期間A進程讀取到s的值一直為0,不再往里面傳輸數據,直到s被b進程置為1,再往共享內存中傳輸數據
?
參考?http://blog.csdn.net/guodongxiaren/article/details/43876207
3.Socket域套接字
4.信號通信
轉載于:https://www.cnblogs.com/Deanboy/p/7552831.html
總結
以上是生活随笔為你收集整理的linux内核多种进程间通信机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发程序设计(十一)设计模式与并
- 下一篇: linux/Windows系统如何安装P