91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux進(jìn)程間通信之管道(pipe)、命名管道(FIFO)與信號(hào)(Signal)

Linux愛(ài)好者 ? 來(lái)源:華山大師兄 ? 作者:華山大師兄 ? 2020-12-11 16:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

管道(pipe)

管道可用于具有親緣關(guān)系進(jìn)程間的通信,有名管道克服了管道沒(méi)有名字的限制,因此,除具有管道所具有的功能外,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信。

實(shí)現(xiàn)機(jī)制:

管道是由內(nèi)核管理的一個(gè)緩沖區(qū),相當(dāng)于我們放入內(nèi)存中的一個(gè)紙條。管道的一端連接一個(gè)進(jìn)程的輸出。這個(gè)進(jìn)程會(huì)向管道中放入信息。

管道的另一端連接一個(gè)進(jìn)程的輸入,這個(gè)進(jìn)程取出被放入管道的信息。

一個(gè)緩沖區(qū)不需要很大,它被設(shè)計(jì)成為環(huán)形的數(shù)據(jù)結(jié)構(gòu),以便管道可以被循環(huán)利用。

當(dāng)管道中沒(méi)有信息的話,從管道中讀取的進(jìn)程會(huì)等待,直到另一端的進(jìn)程放入信息。

當(dāng)管道被放滿信息的時(shí)候,嘗試放入信息的進(jìn)程會(huì)等待,直到另一端的進(jìn)程取出信息。當(dāng)兩個(gè)進(jìn)程都終結(jié)的時(shí)候,管道也自動(dòng)消失。

從原理上,管道利用fork機(jī)制建立,從而讓兩個(gè)進(jìn)程可以連接到同一個(gè)PIPE上。

最開(kāi)始的時(shí)候,上面的兩個(gè)箭頭都連接在同一個(gè)進(jìn)程Process 1上(連接在Process 1上的兩個(gè)箭頭)。

當(dāng)fork復(fù)制進(jìn)程的時(shí)候,會(huì)將這兩個(gè)連接也復(fù)制到新的進(jìn)程(Process 2)。

隨后,每個(gè)進(jìn)程關(guān)閉自己不需要的一個(gè)連接 (兩個(gè)黑色的箭頭被關(guān)閉; Process 1關(guān)閉從PIPE來(lái)的輸入連接,Process 2關(guān)閉輸出到PIPE的連接),這樣,剩下的紅色連接就構(gòu)成了如上圖的PIPE。

實(shí)現(xiàn)細(xì)節(jié):

Linux 中,管道的實(shí)現(xiàn)并沒(méi)有使用專門(mén)的數(shù)據(jù)結(jié)構(gòu),而是借助了文件系統(tǒng)的file結(jié)構(gòu)和VFS的索引節(jié)點(diǎn)inode。

通過(guò)將兩個(gè) file 結(jié)構(gòu)指向同一個(gè)臨時(shí)的 VFS 索引節(jié)點(diǎn),而這個(gè) VFS 索引節(jié)點(diǎn)又指向一個(gè)物理頁(yè)面而實(shí)現(xiàn)的。如下圖

dae718ba-28a5-11eb-a64d-12bb97331649.jpg

有兩個(gè) file 數(shù)據(jù)結(jié)構(gòu),但它們定義文件操作例程地址是不同的,其中一個(gè)是向管道中寫(xiě)入數(shù)據(jù)的例程地址,而另一個(gè)是從管道中讀出數(shù)據(jù)的例程地址。

這樣,用戶程序的系統(tǒng)調(diào)用仍然是通常的文件操作,而內(nèi)核卻利用這種抽象機(jī)制實(shí)現(xiàn)了管道這一特殊操作。

關(guān)于管道的讀寫(xiě)

管道實(shí)現(xiàn)的源代碼在fs/pipe.c中,在pipe.c中有很多函數(shù),其中有兩個(gè)函數(shù)比較重要,即管道讀函數(shù)pipe_read()和管道寫(xiě)函數(shù)pipe_wrtie()。

管道寫(xiě)函數(shù)通過(guò)將字節(jié)復(fù)制到 VFS 索引節(jié)點(diǎn)指向的物理內(nèi)存而寫(xiě)入數(shù)據(jù),而管道讀函數(shù)則通過(guò)復(fù)制物理內(nèi)存中的字節(jié)而讀出數(shù)據(jù)。

當(dāng)然,內(nèi)核必須利用一定的機(jī)制同步對(duì)管道的訪問(wèn),為此,內(nèi)核使用了鎖、等待隊(duì)列和信號(hào)。

當(dāng)寫(xiě)進(jìn)程向管道中寫(xiě)入時(shí),它利用標(biāo)準(zhǔn)的庫(kù)函數(shù)write(),系統(tǒng)根據(jù)庫(kù)函數(shù)傳遞的文件描述符,可找到該文件的 file 結(jié)構(gòu)。

file 結(jié)構(gòu)中指定了用來(lái)進(jìn)行寫(xiě)操作的函數(shù)(即寫(xiě)入函數(shù))地址,

于是,內(nèi)核調(diào)用該函數(shù)完成寫(xiě)操作。寫(xiě)入函數(shù)在向內(nèi)存中寫(xiě)入數(shù)據(jù)之前,必須首先檢查 VFS 索引節(jié)點(diǎn)中的信息,同時(shí)滿足如下條件時(shí),才能進(jìn)行實(shí)際的內(nèi)存復(fù)制工作:

·內(nèi)存中有足夠的空間可容納所有要寫(xiě)入的數(shù)據(jù);

·內(nèi)存沒(méi)有被讀程序鎖定。

如果同時(shí)滿足上述條件,寫(xiě)入函數(shù)首先鎖定內(nèi)存,然后從寫(xiě)進(jìn)程的地址空間中復(fù)制數(shù)據(jù)到內(nèi)存。

否則,寫(xiě)入進(jìn)程就休眠在 VFS 索引節(jié)點(diǎn)的等待隊(duì)列中,接下來(lái),內(nèi)核將調(diào)用調(diào)度程序,而調(diào)度程序會(huì)選擇其他進(jìn)程運(yùn)行。

寫(xiě)入進(jìn)程實(shí)際處于可中斷的等待狀態(tài),當(dāng)內(nèi)存中有足夠的空間可以容納寫(xiě)入數(shù)據(jù),或內(nèi)存被解鎖時(shí),讀取進(jìn)程會(huì)喚醒寫(xiě)入進(jìn)程,這時(shí),寫(xiě)入進(jìn)程將接收到信號(hào)。

當(dāng)數(shù)據(jù)寫(xiě)入內(nèi)存之后,內(nèi)存被解鎖,而所有休眠在索引節(jié)點(diǎn)的讀取進(jìn)程會(huì)被喚醒。

管道的讀取過(guò)程和寫(xiě)入過(guò)程類似。但是,進(jìn)程可以在沒(méi)有數(shù)據(jù)或內(nèi)存被鎖定時(shí)立即返回錯(cuò)誤信息,而不是阻塞該進(jìn)程,這依賴于文件或管道的打開(kāi)模式。

反之,進(jìn)程可以休眠在索引節(jié)點(diǎn)的等待隊(duì)列中等待寫(xiě)入進(jìn)程寫(xiě)入數(shù)據(jù)。當(dāng)所有的進(jìn)程完成了管道操作之后,管道的索引節(jié)點(diǎn)被丟棄,而共享數(shù)據(jù)頁(yè)也被釋放。

Linux函數(shù)原型

#include int pipe(int filedes[2]);

filedes[0]用于讀出數(shù)據(jù),讀取時(shí)必須關(guān)閉寫(xiě)入端,即close(filedes[1]);

filedes[1]用于寫(xiě)入數(shù)據(jù),寫(xiě)入時(shí)必須關(guān)閉讀取端,即close(filedes[0])。

程序?qū)嵗?/p>

int main(void){ int n; int fd[2]; pid_t pid; char line[MAXLINE]; if(pipe(fd) 0){ /* 先建立管道得到一對(duì)文件描述符 */ exit(0); } if((pid = fork()) 0) /* 父進(jìn)程把文件描述符復(fù)制給子進(jìn)程 */ exit(1); else if(pid > 0){ /* 父進(jìn)程寫(xiě) */ close(fd[0]); /* 關(guān)閉讀描述符 */ write(fd[1], " hello world ", 14); } else{ /* 子進(jìn)程讀 */ close(fd[1]); /* 關(guān)閉寫(xiě)端 */ n = read(fd[0], line, MAXLINE); write(STDOUT_FILENO, line, n); } exit(0);}

命名管道(named PIPE)

由于基于fork機(jī)制,所以管道只能用于父進(jìn)程和子進(jìn)程之間,或者擁有相同祖先的兩個(gè)子進(jìn)程之間 (有親緣關(guān)系的進(jìn)程之間)。

為了解決這一問(wèn)題,Linux提供了FIFO方式連接進(jìn)程。FIFO又叫做命名管道(named PIPE)。

FIFO (First in, First out)為一種特殊的文件類型,它在文件系統(tǒng)中有對(duì)應(yīng)的路徑。

當(dāng)一個(gè)進(jìn)程以讀(r)的方式打開(kāi)該文件,而另一個(gè)進(jìn)程以寫(xiě)(w)的方式打開(kāi)該文件,那么內(nèi)核就會(huì)在這兩個(gè)進(jìn)程之間建立管道,所以FIFO實(shí)際上也由內(nèi)核管理,不與硬盤(pán)打交道。

之所以叫FIFO,是因?yàn)楣艿辣举|(zhì)上是一個(gè)先進(jìn)先出的隊(duì)列數(shù)據(jù)結(jié)構(gòu),最早放入的數(shù)據(jù)被最先讀出來(lái),從而保證信息交流的順序。

FIFO只是借用了文件系統(tǒng)(file system,命名管道是一種特殊類型的文件,因?yàn)長(zhǎng)inux中所有事物都是文件,它在文件系統(tǒng)中以文件名的形式存在。)來(lái)為管道命名。

寫(xiě)模式的進(jìn)程向FIFO文件中寫(xiě)入,而讀模式的進(jìn)程從FIFO文件中讀出。

當(dāng)刪除FIFO文件時(shí),管道連接也隨之消失。

FIFO的好處在于我們可以通過(guò)文件的路徑來(lái)識(shí)別管道,從而讓沒(méi)有親緣關(guān)系的進(jìn)程之間建立連接

函數(shù)原型:

#include #include int mkfifo(const char *filename, mode_t mode);int mknode(const char *filename, mode_t mode | S_IFIFO, (dev_t) 0 );

其中pathname是被創(chuàng)建的文件名稱,mode表示將在該文件上設(shè)置的權(quán)限位和將被創(chuàng)建的文件類型(在此情況下為S_IFIFO),dev是當(dāng)創(chuàng)建設(shè)備特殊文件時(shí)使用的一個(gè)值。

因此,對(duì)于先進(jìn)先出文件它的值為0。

程序?qū)嵗?/p>

#include #include #include #include int main() { int res = mkfifo("/tmp/my_fifo", 0777); if (res == 0) { printf("FIFO created/n"); } exit(EXIT_SUCCESS); }

編譯這個(gè)程序:

gcc –o fifo1.c fifo

運(yùn)行這個(gè)程序:

$ fifo1

用ls命令查看所創(chuàng)建的管道

$ls-lF/tmp/my_fifoprwxr-xr-x 1 root root 0 05-08 20:10 /tmp/my_fifo|

注意:ls命令的輸出結(jié)果中的第一個(gè)字符為p,表示這是一個(gè)管道。

最后的|符號(hào)是由ls命令的-F選項(xiàng)添加的,它也表示是這是一個(gè)管道。

FIFO讀寫(xiě)規(guī)則

1.從FIFO中讀取數(shù)據(jù):約定:如果一個(gè)進(jìn)程為了從FIFO中讀取數(shù)據(jù)而阻塞打開(kāi)了FIFO,那么稱該進(jìn)程內(nèi)的讀操作為設(shè)置了阻塞標(biāo)志的讀操作

2.從FIFO中寫(xiě)入數(shù)據(jù):約定:如果一個(gè)進(jìn)程為了向FIFO中寫(xiě)入數(shù)據(jù)而阻塞打開(kāi)FIFO,那么稱該進(jìn)程內(nèi)的寫(xiě)操作為設(shè)置了阻塞標(biāo)志的寫(xiě)操作。

詳見(jiàn):http://blog.csdn.net/MONKEY_D_MENG/article/details/5570468

信號(hào)(Signal)

信號(hào)是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某種事件發(fā)生,除了用于進(jìn)程間通信外,進(jìn)程還可以發(fā)送信號(hào)給進(jìn)程本身;

Linux除了支持Unix早期信號(hào)語(yǔ)義函數(shù)sigal外,還支持語(yǔ)義符合Posix.1標(biāo)準(zhǔn)的信號(hào)函數(shù)sigaction(實(shí)際上,該函數(shù)是基于BSD的,BSD為了實(shí)現(xiàn)可靠信號(hào)機(jī)制,又能夠統(tǒng)一對(duì)外接口,用sigaction函數(shù)重新實(shí)現(xiàn)了signal函數(shù))

信號(hào)種類

db100efa-28a5-11eb-a64d-12bb97331649.jpg

每種信號(hào)類型都有對(duì)應(yīng)的信號(hào)處理程序(也叫信號(hào)的操作),就好像每個(gè)中斷都有一個(gè)中斷服務(wù)例程一樣。

大多數(shù)信號(hào)的默認(rèn)操作是結(jié)束接收信號(hào)的進(jìn)程;

然而,一個(gè)進(jìn)程通常可以請(qǐng)求系統(tǒng)采取某些代替的操作,各種代替操作是:

忽略信號(hào)。隨著這一選項(xiàng)的設(shè)置,進(jìn)程將忽略信號(hào)的出現(xiàn)。

有兩個(gè)信號(hào) 不可以被忽略:SIGKILL,它將結(jié)束進(jìn)程;

SIGSTOP,它是作業(yè)控制機(jī)制的一部分,將掛起作業(yè)的執(zhí)行。

恢復(fù)信號(hào)的默認(rèn)操作。

執(zhí)行一個(gè)預(yù)先安排的信號(hào)處理函數(shù)。

進(jìn)程可以登記特殊的信號(hào)處理函數(shù)。

當(dāng)進(jìn)程收到信號(hào)時(shí),信號(hào)處理函數(shù)將像中斷服務(wù)例程一樣被調(diào)用,當(dāng)從該信號(hào)處理函數(shù)返回時(shí),控制被返回給主程序,并且繼續(xù)正常執(zhí)行。

但是,信號(hào)和中斷有所不同。

中斷的響應(yīng)和處理都發(fā)生在內(nèi)核空間,而信號(hào)的響應(yīng)發(fā)生在內(nèi)核空間,信號(hào)處理程序的執(zhí)行卻發(fā)生在用戶空間。

那么,什么時(shí)候檢測(cè)和響應(yīng)信號(hào)呢?通常發(fā)生在兩種情況下:

當(dāng)前進(jìn)程由于系統(tǒng)調(diào)用、中斷或異常而進(jìn)入內(nèi)核空間以后,從內(nèi)核空間返回到用戶空間前夕;

當(dāng)前進(jìn)程在內(nèi)核中進(jìn)入睡眠以后剛被喚醒的時(shí)候,由于檢測(cè)到信號(hào)的存在而提前返回到用戶空間。

函數(shù)原型等詳見(jiàn):

http://www.cnblogs.com/biyeymyhjob/archive/2012/08/04/2622265.html

信號(hào)本質(zhì)

信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬,在原理上,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一個(gè)中斷請(qǐng)求可以說(shuō)是一樣的。

信號(hào)是異步的,一個(gè)進(jìn)程不必通過(guò)任何操作來(lái)等待信號(hào)的到達(dá),事實(shí)上,進(jìn)程也不知道信號(hào)到底什么時(shí)候到達(dá)。

信號(hào)是進(jìn)程間通信機(jī)制中唯一的異步通信機(jī)制,可以看作是異步通知,通知接收信號(hào)的進(jìn)程有哪些事情發(fā)生了。

信號(hào)機(jī)制經(jīng)過(guò)POSIX實(shí)時(shí)擴(kuò)展后,功能更加強(qiáng)大,除了基本通知功能外,還可以傳遞附加信息。

信號(hào)來(lái)源

信號(hào)事件的發(fā)生有兩個(gè)來(lái)源:

硬件來(lái)源(比如我們按下了鍵盤(pán)或者其它硬件故障);

軟件來(lái)源,最常用發(fā)送信號(hào)的系統(tǒng)函數(shù)是kill, raise, alarm和setitimer以及sigqueue函數(shù),軟件來(lái)源還包括一些非法運(yùn)算等操作。

關(guān)于信號(hào)處理機(jī)制的原理(內(nèi)核角度)

內(nèi)核給一個(gè)進(jìn)程發(fā)送軟中斷信號(hào)的方法,是在進(jìn)程所在的進(jìn)程表項(xiàng)的信號(hào)域設(shè)置對(duì)應(yīng)于該信號(hào)的位。

這里要補(bǔ)充的是,

如果信號(hào)發(fā)送給一個(gè)正在睡眠的進(jìn)程,那么要 看該進(jìn)程進(jìn)入睡眠的優(yōu)先級(jí),如果進(jìn)程睡眠在可被中斷的優(yōu)先級(jí)上,則喚醒進(jìn)程;

否則僅設(shè)置進(jìn)程表中信號(hào)域相應(yīng)的位,而不喚醒進(jìn)程。

這一點(diǎn)比較重要,因?yàn)檫M(jìn)程檢查是否收到信號(hào)的時(shí)機(jī)是:一個(gè)進(jìn)程在即將從內(nèi)核態(tài)返回到用戶態(tài)時(shí);

或者,在一個(gè)進(jìn)程要進(jìn)入或離開(kāi)一個(gè)適當(dāng)?shù)牡驼{(diào)度優(yōu)先級(jí)睡眠狀態(tài)時(shí)。

內(nèi)核處理一個(gè)進(jìn)程收到的信號(hào)的時(shí)機(jī)是在一個(gè)進(jìn)程從內(nèi)核態(tài)返回用戶態(tài)時(shí)。

所以,當(dāng)一個(gè)進(jìn)程在內(nèi)核態(tài)下運(yùn)行時(shí),

軟中斷信號(hào)并不立即起作用,要等到將返回用戶態(tài)時(shí)才處理。

進(jìn)程只有處理完信號(hào)才會(huì)返回用戶態(tài)(上面的例子程序中,在步驟5中,解除阻塞后,先打印caught SIGQUIT,再打印SIGQUIT unblocked,即在sigprocmask返回前,信號(hào)處理程序先執(zhí)行),進(jìn)程在用戶態(tài)下不會(huì)有未處理完的信號(hào)。

內(nèi)核處理一個(gè)進(jìn)程收到的軟中斷信號(hào)是在該進(jìn)程的上下文中,因此,進(jìn)程必須處于運(yùn)行狀態(tài)。

如果進(jìn)程收到一個(gè)要捕捉的信號(hào),那么進(jìn)程從內(nèi)核態(tài)返回用戶態(tài)時(shí)執(zhí)行用戶定義的函數(shù)。

而且執(zhí)行用戶定義的函數(shù)的方法很巧妙,內(nèi)核是在用戶棧上創(chuàng)建一個(gè)新的層,該層中將返回地址的值設(shè)置成用戶定義的處理函數(shù)的地址,

這樣進(jìn)程從內(nèi)核返回彈出棧頂時(shí)就返回到用戶定義的函數(shù)處,從函數(shù)返回再?gòu)棾鰲m敃r(shí),才返回原先進(jìn)入內(nèi)核的地方,接著原來(lái)的地方繼續(xù)運(yùn)行。

這樣做的原因是用戶定義的處理函數(shù)不能且不允許在內(nèi)核態(tài)下執(zhí)行(如果用戶定義的函數(shù)在內(nèi)核態(tài)下運(yùn)行的話,用戶就可以獲得任何權(quán)限)。

在信號(hào)的處理方法中有幾點(diǎn)特別要引起注意。

第一,在一些系統(tǒng)中,當(dāng)一個(gè)進(jìn)程處理完中斷信號(hào)返回用戶態(tài)之前,內(nèi)核清除用戶區(qū)中設(shè)定的對(duì)該信號(hào)的處理例程的地址,

即下一次進(jìn)程對(duì)該信號(hào)的處理方法又改為默認(rèn)值,除非在下一次信號(hào)到來(lái)之前再次使用signal系統(tǒng)調(diào)用。

這可能會(huì)使得進(jìn)程在調(diào)用signal之前又得 到該信號(hào)而導(dǎo)致退出。在BSD中,內(nèi)核不再清除該地址。

但不清除該地址可能使得進(jìn)程因?yàn)檫^(guò)多過(guò)快的得到某個(gè)信號(hào)而導(dǎo)致堆棧溢出。為了避免出現(xiàn)上述情況。

在 BSD系統(tǒng)中,內(nèi)核模擬了對(duì)硬件中斷的處理方法,即在處理某個(gè)中斷時(shí),阻止接收新的該類中斷。

第二個(gè)要引起注意的是,如果要捕捉的信號(hào)發(fā)生于進(jìn)程正在一個(gè)系統(tǒng)調(diào)用中時(shí),并且該進(jìn)程睡眠在可中斷的優(yōu)先級(jí)上(若系統(tǒng)調(diào)用未睡眠而是在運(yùn)行,根據(jù)上面的分 析,等該系統(tǒng)調(diào)用運(yùn)行完畢后再處理信號(hào)),

這時(shí)該信號(hào)引起進(jìn)程作一次longjmp,跳出睡眠狀態(tài),返回用戶態(tài)并執(zhí)行信號(hào)處理例程。

當(dāng)從信號(hào)處理例程返回 時(shí),進(jìn)程就象從系統(tǒng)調(diào)用返回一樣,但返回了一個(gè)錯(cuò)誤如-1,并將errno設(shè)置為EINTR,指出該次系統(tǒng)調(diào)用曾經(jīng)被中斷。

這要注意的是,BSD系統(tǒng)中內(nèi) 核可以自動(dòng)地重新開(kāi)始系統(tǒng)調(diào)用,或者手如上面所述手動(dòng)設(shè)置重啟。

第三個(gè)要注意的地方:若進(jìn)程睡眠在可中斷的優(yōu)先級(jí)上,則當(dāng)它收到一個(gè)要忽略的信號(hào)時(shí),該進(jìn)程被喚醒,但不做longjmp,一般是繼續(xù)睡眠。

但用戶感覺(jué)不 到進(jìn)程曾經(jīng)被喚醒,而是象沒(méi)有發(fā)生過(guò)該信號(hào)一樣。

所以能夠使pause、sleep等函數(shù)從掛起態(tài)返回的信號(hào)必須要有信號(hào)處理函數(shù),如果沒(méi)有什么動(dòng)作,可以將處理函數(shù)設(shè)為空。

第四個(gè)要注意的地方:內(nèi)核對(duì)子進(jìn)程終止(SIGCLD)信號(hào)的處理方法與其他信號(hào)有所區(qū)別。

當(dāng)進(jìn)程正?;虍惓=K止時(shí),內(nèi)核都向其父進(jìn)程發(fā)一個(gè)SIGCLD 信號(hào),缺省情況下,父進(jìn)程忽略該信號(hào),就象沒(méi)有收到該信號(hào)似的,

如果父進(jìn)程希望獲得子進(jìn)程終止的狀態(tài),則應(yīng)該事先用signal函數(shù)為SIGCLD信號(hào)設(shè) 置信號(hào)處理程序,在信號(hào)處理程序中調(diào)用wait。

SIGCLD信號(hào)的作用是喚醒一個(gè)睡眠在可被中斷優(yōu)先級(jí)上的進(jìn)程。

如果該進(jìn)程捕捉了這個(gè)信號(hào),就象普通信號(hào)處理一樣轉(zhuǎn)到處理例程。

如果進(jìn)程忽略該信號(hào),則 什么也不做。

其實(shí)wait不一定放在信號(hào)處理函數(shù)中,但這樣的話因?yàn)椴恢雷舆M(jìn)程何時(shí)終止,在子進(jìn)程終止前,wait將使父進(jìn)程掛起休眠。

信號(hào)生命周期

db47662a-28a5-11eb-a64d-12bb97331649.jpg

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11764

    瀏覽量

    219096
  • 管道
    +關(guān)注

    關(guān)注

    3

    文章

    148

    瀏覽量

    18381
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    41607
  • signal
    +關(guān)注

    關(guān)注

    0

    文章

    110

    瀏覽量

    25956

原文標(biāo)題:Linux 進(jìn)程間通信之管道(pipe)、命名管道(FIFO)與信號(hào)(Signal)

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    進(jìn)程通信

    ”,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫(xiě)進(jìn)程以實(shí)現(xiàn)它們之間通信的一個(gè)共享文件,又名pipe文件。向管道(共享文件)提供輸入的發(fā)送
    發(fā)表于 01-15 06:16

    解析Linux進(jìn)程、線程和協(xié)程

    進(jìn)程通信(IPC):Linux提供了多種IPC機(jī)制,如管道、信號(hào)、共享內(nèi)存和消息隊(duì)列,用于
    發(fā)表于 12-22 11:00

    飛凌嵌入式ElfBoard-Linux系統(tǒng)中的文件分類

    的主要功能和Windows系統(tǒng)中快捷方式類似,它是指向另一個(gè)文件或者目錄,符號(hào)鏈接本身不包含數(shù)據(jù)。6.管道Pipe)和套接字(Socket)Linux提供了管道和套接字機(jī)制,用于不同
    發(fā)表于 12-09 08:59

    Linux進(jìn)程通信(IPC)全解析:從管道到?Socket,一篇講透

    在?Linux?世界里,進(jìn)程并非孤立存在。無(wú)論是后臺(tái)服務(wù)協(xié)作(如?Web?服務(wù)器與數(shù)據(jù)庫(kù))、命令行工具聯(lián)動(dòng)(如ps | grep),還是復(fù)雜應(yīng)用的模塊通信,都離不開(kāi) 進(jìn)程
    的頭像 發(fā)表于 11-14 21:38 ?1.3w次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進(jìn)程</b><b class='flag-5'>間</b><b class='flag-5'>通信</b>(IPC)全解析:從<b class='flag-5'>管道</b>到?Socket,一篇講透

    管道運(yùn)輸中的傳感器:管道狀態(tài)監(jiān)測(cè)

    在現(xiàn)代工業(yè)體系中,管道運(yùn)輸承擔(dān)著不可或缺的重任,無(wú)論是石油、天然氣等能源的長(zhǎng)距離輸送,還是化工原料在不同生產(chǎn)環(huán)節(jié)的流轉(zhuǎn),管道運(yùn)輸都憑借其高效、連續(xù)、低成本的優(yōu)勢(shì),成為工業(yè)生產(chǎn)和能源供應(yīng)的關(guān)鍵環(huán)節(jié)。
    的頭像 發(fā)表于 09-05 16:10 ?540次閱讀

    【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】—— linux 進(jìn)程創(chuàng)建

    Linux進(jìn)程通信方式有這幾種: 1。管道 2。信號(hào)量 3。消息隊(duì)列 4。共享內(nèi)存 在本帖子中,我會(huì)講解fork(),exit()系統(tǒng)調(diào)用的
    發(fā)表于 09-01 20:49

    功率放大器賦能:基于正則模態(tài)展開(kāi)的管道彎曲處導(dǎo)波散射研究

    管道網(wǎng)絡(luò)中,導(dǎo)波(guidedwaves)的傳播特性對(duì)于無(wú)損檢測(cè)和結(jié)構(gòu)健康監(jiān)測(cè)等領(lǐng)域具有重要意義。當(dāng)導(dǎo)波通過(guò)管道彎曲處時(shí),會(huì)發(fā)生散射現(xiàn)象,這會(huì)影響導(dǎo)波的傳播效率和信號(hào)質(zhì)量。因此,研究管道
    的頭像 發(fā)表于 08-28 11:29 ?519次閱讀
    功率放大器賦能:基于正則模態(tài)展開(kāi)的<b class='flag-5'>管道</b>彎曲處導(dǎo)波散射研究

    管道浮力平衡壓袋(配重壓袋)工作原理

    管道浮力平衡壓袋(配重壓袋)工作原理
    發(fā)表于 06-12 15:09 ?0次下載

    天然氣管道保壓密封測(cè)試應(yīng)用方案

    天然氣管道在鋪設(shè)完成后需進(jìn)行保壓密封測(cè)試,以確保管道系統(tǒng)無(wú)泄漏、承壓能力符合設(shè)計(jì)要求。根據(jù)國(guó)家標(biāo)準(zhǔn) GB 50251《輸氣管道工程設(shè)計(jì)規(guī)范》 和 GB 50369《油氣長(zhǎng)輸管道工程施
    的頭像 發(fā)表于 05-28 09:15 ?2292次閱讀

    PID管道儀表流程圖識(shí)讀方法【推薦下載】

    管道儀表流程圖(P&amp;ID)又稱施工流程圖或工藝安裝流程圖。它是在方案流程圖的基礎(chǔ)上繪制而成的,是自動(dòng)化工程設(shè)計(jì)的依據(jù),亦可供施工安裝和生產(chǎn)操作時(shí)參考。 下面是部分截圖,需要的的同學(xué)可以下載查看!
    發(fā)表于 05-22 17:30

    才茂燃?xì)?b class='flag-5'>管道遠(yuǎn)程監(jiān)控方案

    燃?xì)?b class='flag-5'>管道如同城市的"血管",大多數(shù)深埋地下,默默承擔(dān)著能源輸送的重任。然而,人類活動(dòng)、地質(zhì)變化、建筑沉降、管道腐蝕等因素時(shí)刻威脅著管網(wǎng)的安全。隨著城市燃?xì)夤芫W(wǎng)規(guī)模
    的頭像 發(fā)表于 04-30 08:45 ?612次閱讀
    才茂燃?xì)?b class='flag-5'>管道</b>遠(yuǎn)程監(jiān)控方案

    安泰功率放大器在管道螺旋導(dǎo)波信號(hào)測(cè)量實(shí)驗(yàn)中的應(yīng)用

    實(shí)驗(yàn)名稱:功率放大器在管道螺旋導(dǎo)波信號(hào)測(cè)量實(shí)驗(yàn)中的應(yīng)用 實(shí)驗(yàn)內(nèi)容:測(cè)量沿著管道壁面以螺旋方式行進(jìn)的準(zhǔn)lamb導(dǎo)波,研究其傳播規(guī)律。 研究方向:管道導(dǎo)波無(wú)損檢測(cè) 測(cè)試設(shè)備:
    的頭像 發(fā)表于 04-15 10:57 ?654次閱讀
    安泰功率放大器在<b class='flag-5'>管道</b>螺旋導(dǎo)波<b class='flag-5'>信號(hào)</b>測(cè)量實(shí)驗(yàn)中的應(yīng)用

    焊接熔池監(jiān)控相機(jī)在管道焊接中的應(yīng)用:高效監(jiān)測(cè),保障管道安全

    在油氣輸送、化工建設(shè)等重大工程領(lǐng)域,都對(duì)管道有著大量的需求,管道的焊接質(zhì)量直接關(guān)系到設(shè)備的安全性與穩(wěn)定性。傳統(tǒng)的焊接作業(yè),熔池形態(tài)、溫度分布等關(guān)鍵參數(shù)的監(jiān)測(cè)高度依賴人工經(jīng)驗(yàn),存在實(shí)時(shí)性差、難以全程
    的頭像 發(fā)表于 04-14 16:06 ?775次閱讀
    焊接熔池監(jiān)控相機(jī)在<b class='flag-5'>管道</b>焊接中的應(yīng)用:高效監(jiān)測(cè),保障<b class='flag-5'>管道</b>安全

    Aigtek功率放大器在管道定位系統(tǒng)硬件中的應(yīng)用

    實(shí)驗(yàn)名稱: 管道定位系統(tǒng)的硬件實(shí)現(xiàn) 研究方向: 管道無(wú)損檢測(cè) 實(shí)驗(yàn)內(nèi)容: 開(kāi)展基于PCM的管道定位系統(tǒng)的可行性研究:采用函數(shù)發(fā)生器產(chǎn)生4Hz、8Hz和72Hz的多頻電流,并將信號(hào)輸出
    的頭像 發(fā)表于 03-12 11:25 ?583次閱讀
    Aigtek功率放大器在<b class='flag-5'>管道</b>定位系統(tǒng)硬件中的應(yīng)用

    無(wú)人機(jī)石油管道巡檢系統(tǒng)守護(hù)能源輸送安全

    無(wú)人機(jī)石油管道巡檢系統(tǒng)守護(hù)能源輸送安全 在石油行業(yè),管道如同遍布大地的血管,承擔(dān)著能源輸送的重任。然而,這些管道往往跨越復(fù)雜地形,暴露于惡劣環(huán)境,傳統(tǒng)的人工巡檢方式不僅效率低、風(fēng)險(xiǎn)高,還難以全面覆蓋
    的頭像 發(fā)表于 03-11 16:50 ?926次閱讀