九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來(lái)到小浪云!


【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池


01.進(jìn)程通信

進(jìn)程之間需要某種協(xié)同,所以如何協(xié)同的前提條件就是進(jìn)程直接需要進(jìn)行通信,傳遞有效數(shù)據(jù)

前面提到過(guò),進(jìn)程是具有獨(dú)立性的,進(jìn)程=內(nèi)核數(shù)據(jù)結(jié)構(gòu)+代碼和數(shù)據(jù)

前面講到子進(jìn)程創(chuàng)建會(huì)繼承父進(jìn)程的信息,后面會(huì)發(fā)生寫(xiě)時(shí)拷貝,不屬于進(jìn)程間通信,我們提到的進(jìn)程間通信,是讓其一直通信

進(jìn)程如何通信呢?

因?yàn)檫M(jìn)程具有獨(dú)立性,所以一個(gè)進(jìn)程開(kāi)辟的資源另一個(gè)進(jìn)程是看不到的,所以進(jìn)程間通信的前提,先讓不同的進(jìn)程,看到同一份(操作系統(tǒng))資源(“一段內(nèi)存”)

【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池

一定是某一個(gè)進(jìn)程先需要通信,讓OS創(chuàng)建一個(gè)共享資源

OS必須提供很多系統(tǒng)調(diào)用

OS創(chuàng)建的共享資源的不同,系統(tǒng)調(diào)用接口的不同,進(jìn)程間通信會(huì)有不同的種類(lèi)

進(jìn)程通信的常見(jiàn)方式:

System V IPC:System V 消息隊(duì)列,System V 共享內(nèi)存,System V 信號(hào)量

POSIX IPC:消息隊(duì)列,共享內(nèi)存,信號(hào)量,互斥量,條件變量,讀寫(xiě)鎖

管道:匿名管道pipe,命名管道

02.管道

【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池

操作系統(tǒng)打開(kāi)一個(gè)文件,屬性初始化struct file,內(nèi)容寫(xiě)到內(nèi)核級(jí)文件緩沖區(qū)

當(dāng)以讀和寫(xiě)兩種方式分別打開(kāi)同一個(gè)文件時(shí),操作系統(tǒng)為其分配文件描述符fd 3 4 ,當(dāng)?shù)诙未蜷_(kāi)同一個(gè)文件的時(shí)候,操作系統(tǒng)不需要再將文件的屬性,操作方法集,緩沖區(qū)再加載一次,只有struct file會(huì)被單獨(dú)創(chuàng)建兩次

創(chuàng)建子進(jìn)程以父進(jìn)程模版copy一份,子進(jìn)程文件描述符表也創(chuàng)建一份

【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池

創(chuàng)建子進(jìn)程,還需要為3,4描述符再拷貝兩個(gè)Struct file嗎?答案是不用的,進(jìn)程的獨(dú)立性跟文件沒(méi)有關(guān)系

這里的拷貝類(lèi)似淺拷貝的過(guò)程,子進(jìn)程的3,4號(hào)指針也會(huì)指向文件系統(tǒng)中父進(jìn)程指向的同一個(gè)struct file

所以為什么父子進(jìn)程會(huì)向同一個(gè)顯示器終端打印數(shù)據(jù)?就是因?yàn)槲募枋龇赶蛲粋€(gè)文件

進(jìn)程默認(rèn)會(huì)打開(kāi)三個(gè)標(biāo)準(zhǔn)輸入輸出:0,1,2,怎么做到的?bash的子進(jìn)程–bash打開(kāi)了,所有的子進(jìn)程默認(rèn)也就打開(kāi)了,我們只要做好約定即可

我們子進(jìn)程主動(dòng)close(0/1/2),不影響父進(jìn)程繼續(xù)使用顯示器文件

前面也提到,文件會(huì)記錄自己的硬鏈接數(shù),這里struct file也會(huì)記錄指向自己的文件描述符個(gè)數(shù),當(dāng)ref_count等于0時(shí)釋放文件資源

進(jìn)程間通信的本質(zhì),先讓兩個(gè)不同的進(jìn)程看到一份公共的資源,這里父子進(jìn)程看到了同一塊文件內(nèi)核級(jí)緩沖區(qū),這里的公共資源,我們就將它叫做管道文件

管道只允許單向通信,不需要刷新到磁盤(pán),所以需要重新設(shè)計(jì)通信接口

【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池

#include 功能:創(chuàng)建一無(wú)名管道 原型

代碼語(yǔ)言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制

int pipe(int fd[2]);

參數(shù) fd:文件描述符數(shù)組,其中fd[0]表示讀端, fd[1]表示寫(xiě)端 返回值:成功返回0,失敗返回錯(cuò)誤代碼

本質(zhì)是對(duì)open的封裝,不需要文件路徑和文件名,所以叫做匿名管道

【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池
【Linux】進(jìn)程間通信:匿名管道與進(jìn)程池

如果想雙向通信,就構(gòu)建兩個(gè)管道

測(cè)試管道接口代碼語(yǔ)言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制

#include<iostream>#include<string>#include<cerrno>#include<unistd.h>#include<sys>#include<cstring>#include<sys>using namespace std;string getOtherMessage(){    static int cnt=0;    string messageid=to_string(cnt);    cnt++;    pid_t self_id =getpid();    string stringpid =to_string(self_id);    string message = "messageid: ";    message+=messageid;    message+="my pid is: ";    message+=stringpid+"n";    return message;}void SubProcessWrite(int wfd){    string message="I am chile process";    while(true)    {        string info=message+ getOtherMessage();        write(wfd,info.c_str(),info.size());//寫(xiě)入管道的時(shí)候,沒(méi)必要寫(xiě)入

主站蜘蛛池模板:
日韩在线不卡视频
|
三级av在线
|
国产成人精品一区二区三区在线观看
|
欧美国产日韩在线观看成人
|
日日日日操
|
国产精品免费在线
|
91中文视频
|
国产在线视频三区
|
国产精品久久久久久久一区二区
|
国产精品亚洲一区二区三区在线
|
精品综合网
|
日韩中文字幕在线视频
|
久久中文免费视频
|
成人免费网站视频
|
久久久精品一区二区
|
久草网站
|
久久久www成人免费精品
|
一本久久a久久精品亚洲
|
一区二区三区亚洲视频
|
久久综合成人精品亚洲另类欧美
|
成人免费福利视频
|
欧美午夜精品
|
久久综合狠狠综合久久综合88
|
日韩欧美一区二区三区四区
|
夜夜艹
|
中日av
|
一区二区三区视频在线观看
|
www.黄色网|
在线播放国产一区二区三区
|
久草网在线视频
|
中文字幕av一区二区三区
|
免费99精品国产自在在线
|
一区二区在线观看av
|
91高清免费
|
久久久成人免费一区二区
|
中文字幕一级
|
欧美日本韩国一区二区三区
|
琪琪午夜伦伦电影福利片
|
毛片免费看的
|
日韩一区二区精品
|
99视频|