linux 进程通信机制,linux的进程通信机制小结
linux向應(yīng)用軟件提供下列進(jìn)程間通信手段:
####第一類通信方式:只能用于父進(jìn)程與子進(jìn)程之間,或者兩個(gè)兄遞進(jìn)程之間。
>管道Pipe
>信號Signal
>跟蹤Trace
管道:由父進(jìn)程來建立。管道兩端的進(jìn)程各自都將該管道視作一個(gè)文件。一個(gè)進(jìn)程往管道中寫的內(nèi)容由另一個(gè)進(jìn)程從管道中讀取,通過管道傳遞的內(nèi)容遵循先入先出FIFO的規(guī)則。每個(gè)管道都是單向的,需要雙向通信時(shí)就要建立起兩個(gè)管道。
信號:signal可用于進(jìn)程間通信,也用于內(nèi)核與進(jìn)程之間的通信(內(nèi)核只能向進(jìn)程發(fā)送信號而不能接收)。發(fā)送信號時(shí)需要用到對方的pid,而一般只有父子進(jìn)程才知道對方的pid,所以實(shí)際上還是只能用于父子進(jìn)程。
跟蹤:一個(gè)進(jìn)程可以通過系統(tǒng)調(diào)用ptrace()讀/寫其子進(jìn)程地址空間中的內(nèi)容,從而達(dá)到跟蹤子進(jìn)程執(zhí)行的目的。跟蹤是單向的。
第二種通信方式:
>命名管道Named Pipe
>報(bào)文Message
>共享內(nèi)存
>信號量Semaphore
>套接字Socket
命名管道:命名管道以FIFO文件的形式出現(xiàn)在文件系統(tǒng)中,所以任何進(jìn)程都可以通過使用其文件名來打開管道,然后進(jìn)行讀寫。
報(bào)文隊(duì)列:一個(gè)進(jìn)程可以通過系統(tǒng)調(diào)用設(shè)立一個(gè)報(bào)文隊(duì)列。任何進(jìn)程都可以通過系統(tǒng)調(diào)用向這個(gè)隊(duì)列發(fā)送消息或從隊(duì)列中接收信息,從而以進(jìn)程間報(bào)文傳遞的形式實(shí)現(xiàn)通信。
共享內(nèi)存:一個(gè)進(jìn)程可以通過系統(tǒng)調(diào)用設(shè)立一片共享內(nèi)存區(qū),然后其它進(jìn)程就可以通過系統(tǒng)調(diào)用將該存儲(chǔ)區(qū)映射到其用戶地址空間中。
套接字:socket可以用來實(shí)現(xiàn)分布于不同計(jì)算機(jī)中的進(jìn)程通過網(wǎng)絡(luò)進(jìn)行的通信。只要雙方都有一樣的套接字,并且兩個(gè)套接字之間有通信線路相連接,就可以完成雙方通信。socket相當(dāng)于管道兩端的閥門。
>socket原語:
SOCKET:創(chuàng)建一個(gè)新的通信端點(diǎn)
BIND:將一個(gè)本地地址關(guān)聯(lián)到一個(gè)套接字
LISTEN:宣布愿意接受連接,指定隊(duì)列大小
ACCEPT:阻塞調(diào)用方,直到有連接到來
CONNECT:主動(dòng)嘗試建立連接
RECV:從指定連接中接收數(shù)據(jù)
SEND:在指定連接上發(fā)送數(shù)據(jù)
CLOSE:釋方指定的連接
總結(jié)
以上是生活随笔為你收集整理的linux 进程通信机制,linux的进程通信机制小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米笔记本 镜像_小米笔记本Pro Wi
- 下一篇: java linux 调用32位so_L