进程的通信
管道
什么是管道
由于進(jìn)程之間是相互獨(dú)立的,因此在進(jìn)程與進(jìn)程之間進(jìn)行相互聯(lián)系的時(shí)候,此時(shí)就需要采用一種機(jī)制,通過管道的方式將進(jìn)程一個(gè)進(jìn)程的執(zhí)行數(shù)據(jù)交給另外一個(gè)進(jìn)程,此時(shí)就可以以通過管道來實(shí)現(xiàn)
匿名管道和命名管道
匿名管道
創(chuàng)建一個(gè)匿名管道的方式是pipe(int pipe[2])
要?jiǎng)?chuàng)建一個(gè)匿名管道,此時(shí)兩個(gè)管道之間必須有父子關(guān)系,同時(shí)匿名管道對數(shù)據(jù)的讀取是基于流的方式實(shí)現(xiàn)的,,同時(shí)為了使得進(jìn)程之間的資源能夠正確訪問,此時(shí)就需要采用一種機(jī)制使得進(jìn)程之間的既可以正常訪問資源,這樣的機(jī)制就是同步機(jī)制.管道是基于父子關(guān)系的進(jìn)程之間的,此時(shí)管道的生命周期就會(huì)隨進(jìn)程.同時(shí)管道是單向的,這就像家里自來水管中的額數(shù)一樣,它只有一個(gè)方向的流動(dòng).管道讀端關(guān)閉,寫端還一直在寫此時(shí)會(huì)觸發(fā)SIGPIP信號(hào),當(dāng)寫端已經(jīng)不再繼續(xù)寫了,但是讀端還在一直進(jìn)行讀操作,此時(shí)進(jìn)程會(huì)讀到0,當(dāng)寫入的數(shù)據(jù)小于管道規(guī)定的數(shù)據(jù)的長度的時(shí)候,此時(shí)系統(tǒng)會(huì)保證數(shù)據(jù)的原子寫入,當(dāng)寫入的數(shù)據(jù)大于管道的最大規(guī)定的字節(jié)數(shù)的時(shí)候,此時(shí)就不會(huì)再進(jìn)行寫操作.
命名管道:
命名管道是基于mkfifo,通過mkfifo創(chuàng)建的管道存在于磁盤中,命名管道和匿名管道之間的區(qū)別在于兩者之間的打開方式不同,命名管道是通過open來打開,但是匿名管道是通過創(chuàng)建就會(huì)打開
消息隊(duì)列
雖然進(jìn)程進(jìn)通信已經(jīng)有管道了,但是管道只能基于有血緣關(guān)系的進(jìn)程之間進(jìn)行通信,為了實(shí)現(xiàn)任何進(jìn)程之間的通信,此時(shí)就引入了消息隊(duì)列.其中消息隊(duì)列時(shí)基于一個(gè)一個(gè)的數(shù)據(jù)塊的,同時(shí)數(shù)據(jù)塊是由類型的,數(shù)據(jù)塊也是由規(guī)定的做大長度的,系統(tǒng)中的消息隊(duì)列的長度也是有限制的,發(fā)送者在進(jìn)行發(fā)送的時(shí)候此時(shí)就需要將數(shù)據(jù)的類型進(jìn)行標(biāo)記,接收者在進(jìn)行接受的時(shí)候就可以通過這個(gè)類型來直到這個(gè)數(shù)據(jù)是否來自發(fā)送方.
共享內(nèi)存
沒有血緣關(guān)系的進(jìn)程之間的通信雖然可以利用消息隊(duì)列完成,但是在創(chuàng)建消息隊(duì)列的時(shí)候,此時(shí)必須先將兩個(gè)進(jìn)程之間通過消息隊(duì)列的類型來確認(rèn)此時(shí)接受的消息是否正確,這樣勢必會(huì)造成兩個(gè)進(jìn)程之間的通信效率會(huì)降低,此時(shí)為了使得兩個(gè)進(jìn)程之間能夠高效的進(jìn)行通信,就提出了共享內(nèi)存.共享內(nèi)存是通過一段共享內(nèi)存,將兩個(gè)進(jìn)程關(guān)聯(lián)到這塊內(nèi)存,此時(shí)兩個(gè)進(jìn)程已經(jīng)都關(guān)聯(lián)到這塊內(nèi)存中,因此只要一個(gè)進(jìn)程向這塊內(nèi)存中發(fā)送數(shù)據(jù),此時(shí)另外一個(gè)進(jìn)程就會(huì)看到這個(gè)消息,因此消息隊(duì)列是塊的IPC形式
信號(hào)量
信號(hào)量實(shí)際就是一個(gè)計(jì)數(shù)器,技術(shù)器中的數(shù)值代表的是當(dāng)前資源的多少.
幾個(gè)命令
查看消息隊(duì)列:
ipcs -q
刪除消息隊(duì)列:
ipcrm -q
查看共享內(nèi)存:
ipcs -m
刪除共享內(nèi)存:
ipcrm -m
進(jìn)程的退出碼
總結(jié)
- 上一篇: 网络五层模型
- 下一篇: 英雄联盟盒子下载完为啥启动不了游戏