第5章 關(guān)于信號、進(jìn)程、線程的編程20160121_第1頁
第5章 關(guān)于信號、進(jìn)程、線程的編程20160121_第2頁
第5章 關(guān)于信號、進(jìn)程、線程的編程20160121_第3頁
第5章 關(guān)于信號、進(jìn)程、線程的編程20160121_第4頁
第5章 關(guān)于信號、進(jìn)程、線程的編程20160121_第5頁
已閱讀5頁,還剩163頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程電氣信息工程學(xué)院電氣信息工程學(xué)院20162016年年第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程嵌入式系統(tǒng)課程組嵌入式系統(tǒng)課程組20162016年年第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.1 概念5.1 .1 任務(wù)、進(jìn)程、線程 任務(wù) 任務(wù)是一個(gè)抽象的、一般性的術(shù)語,指由軟件完成的一個(gè)活動(dòng),是一系列為了達(dá)到某一目的的操作。2.進(jìn)程進(jìn)程常常被定義為一個(gè)正在運(yùn)行的程序?qū)嵗?,一個(gè)任務(wù)至少有一個(gè)進(jìn)程。3.線程線程是

2、某一進(jìn)程中的一路單獨(dú)運(yùn)行的程序,一個(gè)進(jìn)程至少有一個(gè)線程。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程操作系統(tǒng)對任務(wù)、進(jìn)程、線程時(shí)間片輪轉(zhuǎn)調(diào)度方式可通過圖5-1理解。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程進(jìn)程間通信有如下一些目的:數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程,發(fā)送的數(shù)據(jù)量在一個(gè)字節(jié)到幾兆字節(jié)之間。共享數(shù)據(jù):多個(gè)進(jìn)程想要操作共享數(shù)據(jù),一個(gè)進(jìn)程對共享數(shù)據(jù)的修改,別的進(jìn)程應(yīng)該立刻看到。通知事件:

3、一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時(shí)要通知父進(jìn)程)。資源共享:多個(gè)進(jìn)程之間共享同樣的資源。為了作到這一點(diǎn),需要內(nèi)核提供鎖和同步機(jī)制。進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常,并能夠及時(shí)知道它的狀態(tài)改變。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程 現(xiàn)在linux使用的進(jìn)程間通信方式: (1)管道(pipe)和有名管道(FIFO) (2)信號(signal) (3)消息隊(duì)列 (4)共

4、享內(nèi)存 (5)信號量 (6)套接字(socket)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5

5、 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 進(jìn)程的創(chuàng)建及多進(jìn)程編程進(jìn)程1進(jìn)程2父進(jìn)程子進(jìn)程LinuxLinux進(jìn)程的族親關(guān)系進(jìn)程的族親關(guān)系LinuxLinux進(jìn)程之間不是孤立存在的,它們之間有一定的族親關(guān)系。進(jìn)程之間不是孤立存在的,它們之間有一定的族親關(guān)系。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)

6、于信號、進(jìn)程、線程的編程5.2 進(jìn)程的創(chuàng)建及多進(jìn)程編程父進(jìn)程子進(jìn)程1子進(jìn)程2子進(jìn)程子進(jìn)程1 1與子進(jìn)程與子進(jìn)程2 2構(gòu)成兄弟進(jìn)程。(按照創(chuàng)建時(shí)間確定,構(gòu)成兄弟進(jìn)程。(按照創(chuàng)建時(shí)間確定,先者為兄,后者為弟);先者為兄,后者為弟);第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 進(jìn)程的創(chuàng)建及多進(jìn)程編程init進(jìn)程A進(jìn)程B進(jìn)程C進(jìn)程D進(jìn)程E進(jìn)程FlLinuxLinux系統(tǒng)的進(jìn)程樹系統(tǒng)的進(jìn)程樹l系統(tǒng)加電啟動(dòng)后,系統(tǒng)中只有一個(gè)進(jìn)程系統(tǒng)加電啟動(dòng)后,系統(tǒng)中只有一個(gè)進(jìn)程-初始化進(jìn)程,初始化進(jìn)程,l又稱又稱initi

7、nit進(jìn)程(對應(yīng)的結(jié)構(gòu)體進(jìn)程(對應(yīng)的結(jié)構(gòu)體init_task)init_task)。lInitInit進(jìn)程是所有進(jìn)程的祖先進(jìn)程,它的進(jìn)程進(jìn)程是所有進(jìn)程的祖先進(jìn)程,它的進(jìn)程pid=1pid=1第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 進(jìn)程的創(chuàng)建及多進(jìn)程編程5.2.1 相關(guān)函數(shù)1 fork()-創(chuàng)建子進(jìn)程函數(shù)定義: pid_t fork()2 getpid()-取得當(dāng)前進(jìn)程的進(jìn)程號函數(shù)定義: pid_getpid(void)3 getppid()-取得當(dāng)前進(jìn)程的父進(jìn)程進(jìn)程號函數(shù)定義: pid_ge

8、tppid(void)4 wait()-暫停父進(jìn)程的執(zhí)行,直到它的子進(jìn)程結(jié)束為止函數(shù)定義: pid_wait(int*status)5 waitpid()-暫停當(dāng)前進(jìn)程的執(zhí)行,等待某個(gè)特定子進(jìn)程的結(jié)束函數(shù)定義: pid_t waitpid(pid_t pid,int*status, int options)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 進(jìn)程的創(chuàng)建及多進(jìn)程編程5.2.1 相關(guān)函數(shù)6 system()-建立一個(gè)子進(jìn)程,在子進(jìn)程中執(zhí)行指定的命令函數(shù)定義: int system(const

9、 char*file)7 exit()-結(jié)束當(dāng)前進(jìn)程函數(shù)定義:void exit(int status)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 創(chuàng)建進(jìn)程編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 創(chuàng)建進(jìn)程編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2 創(chuàng)建進(jìn)程編程示例第第5 5章章

10、關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2.3 exec函數(shù)族的使用第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2.4 exec函數(shù)編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2.4 exec函數(shù)編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)

11、于信號、進(jìn)程、線程的編程5.2.4 exec函數(shù)編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.2.4 exec函數(shù)編程示例第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.3 信號的使用5.3.1 什么是信號信號是進(jìn)程在執(zhí)行過程中由于某種原因產(chǎn)生的一個(gè)消息1 信號產(chǎn)生的原因(1)軟件產(chǎn)生的異常:除零操作(2)硬件產(chǎn)生信號:設(shè)置的鬧鐘時(shí)間(3)終端產(chǎn)生的信號:ctrl+C2. Linux操作系統(tǒng)下可能產(chǎn)生的

12、信號 kill -1命令第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程3 Linux操作系統(tǒng)下信號的分類第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.3.2 進(jìn)程對信號的響應(yīng)1 進(jìn)程對各種信號的不同處理方法忽略信號:捕獲信號:執(zhí)行默認(rèn)操作:有些信號:2. 進(jìn)程對各種信號的默認(rèn)動(dòng)作e.g. 5-5 向運(yùn)行進(jìn)程發(fā)送信號,觀察進(jìn)程運(yùn)行結(jié)果第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章

13、 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.3.3 相關(guān)函數(shù)1 alarm()-向當(dāng)前進(jìn)程發(fā)送sigalrm信號Unsigned int alarm(unsigned int seconds)2. kill()-向指定進(jìn)程發(fā)送信號Int kill(pid_t pid, int signo)3.raise()-向進(jìn)程自身發(fā)送信號Int raise(int signo)4. pause()-暫停當(dāng)前進(jìn)程Int pause(void)5.signal()-設(shè)置信號處理方式Int signal(int signum, void*handler)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)

14、于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程e.g. 5-6第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信目的目的為什么進(jìn)程間需要通信為什么進(jìn)程間需要通信? ?1 1、數(shù)據(jù)傳輸、數(shù)據(jù)傳輸2 2、資源共享、資源共享第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、

15、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信3 3、通知事件、通知事件4 4、進(jìn)程控制、進(jìn)程控制第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信發(fā)展發(fā)展第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信 現(xiàn)在li

16、nux使用的進(jìn)程間通信方式: (1)管道(pipe)和有名管道(FIFO)管道可用于具有親緣關(guān)系進(jìn)程間的通信,有名管道,除具有管道所具有的功能外,它還允許無親緣關(guān)系進(jìn)程間的通信。 (2)信號(signal)信號是在軟件層次上對中斷機(jī)制的一種模擬,它是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某事件發(fā)生,一個(gè)進(jìn)程收到一個(gè)信號與處理器收到一個(gè)中斷請求效果上可以說是一樣的。 第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信 (3)消息隊(duì)列 消息隊(duì)列是消息的鏈接表,包括Posix 消息隊(duì)列syste

17、mV 消息隊(duì)列。它克服了前兩種通信方式中信息量有限的缺點(diǎn),具有寫權(quán)限的進(jìn)程可以向消息隊(duì)列中按照一定的規(guī)則添加新消息;對消息隊(duì)列有讀權(quán)限的進(jìn)程則可以從消息隊(duì)列中讀取消息。 (4 )共享內(nèi)存 可以說這是最有用的進(jìn)程間通信方式。它使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對方進(jìn)程中對共享內(nèi)存中數(shù)據(jù)的更新。這種通信方式需要依靠某種同步機(jī)制,如互斥鎖和信號量等。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信 (5)信號量 主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步手段。 (6)套

18、接字(Socket) 這是一種更為一般的進(jìn)程間通信機(jī)制,它可用于不同機(jī)器之間的進(jìn)程間通信,應(yīng)用非常廣泛。 第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信信號(signal)機(jī)制是Unix系統(tǒng)中最為古老的進(jìn)程之間的通信機(jī)制。很多條件可以產(chǎn)生一個(gè)信號。1、當(dāng)用戶按某些終端鍵時(shí),產(chǎn)生信號。在終端上按DELETE鍵通常產(chǎn)生中斷信號(SIGINT)。這是停止一個(gè)已失去控制程序的方法。2、硬件異常產(chǎn)生信號:除數(shù)為0、無效的存儲訪問等等。這些條件通常由硬件檢測到,并將其通知內(nèi)核。然后內(nèi)核為該條件發(fā)生

19、時(shí)正在運(yùn)行的進(jìn)程產(chǎn)生適當(dāng)?shù)男盘?。例如,對?zhí)行一個(gè)無效存儲訪問的進(jìn)程產(chǎn)生一個(gè)SIGSEGV。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信3、進(jìn)程用kill( 2 )函數(shù)可將信號發(fā)送給另一個(gè)進(jìn)程或進(jìn)程組。自然,有些限制:接收信號進(jìn)程和發(fā)送信號進(jìn)程的所有者必須相同,或發(fā)送信號進(jìn)程的所有者必須是超級用戶。4、用戶可用kill( 1 )命令將信號發(fā)送給其他進(jìn)程。此程序是kill函數(shù)的界面。常用此命令終止一個(gè)失控的后臺進(jìn)程。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第

20、5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信內(nèi)核為進(jìn)程生產(chǎn)信號,來響應(yīng)不同的事件,這些事件就是信號源。主要的信號源如下: 異常:進(jìn)程運(yùn)行過程中出現(xiàn)異常; 其它進(jìn)程:一個(gè)進(jìn)程可以向另一個(gè)或一組進(jìn)程發(fā)送信號; 終端中斷:Ctrl-C,Ctrl-等; 作業(yè)控制:前臺、后臺進(jìn)程的管理; 分配額:CPU超時(shí)或文件大小突破限制; 通知:通知進(jìn)程某事件發(fā)生,如I/O就緒等; 報(bào)警:計(jì)時(shí)器到期。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信Linux 中的信號1

21、) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP6) SIGIOT 7) SIGBUS 8) SIGFPE9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR213) SIGPIPE 14) SIGALRM15) SIGTERM17) SIGCHLD18) SIGCONT 19) SIGSTOP20) SIGTSTP21) SIGTTIN22) SIGTTOU 23) SIGURG24) SIGXCPU25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH 29) SIGI

22、O30) SIGPWR第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程當(dāng)某個(gè)信號出現(xiàn)時(shí),將按照下列三種方式中的一種進(jìn)行操作。 (1) 忽略此信號。大多數(shù)信號都可使用這種方式進(jìn)行處理,但有兩種信號卻決不能被忽略。它們是:SIGKILL和SIGSTOP。這兩種信號不能被忽略的原因是:它們向超級用戶提供一種使進(jìn)程終止或停止的可靠方法。另外,如果忽略某些由硬件異常產(chǎn)生的信號(例如非法存儲訪問或除以0),則進(jìn)程的行為是未定義的。信號處理第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程(2) 執(zhí)行用戶希望的動(dòng)作(捕捉信號)為了做到這一點(diǎn)要通知內(nèi)核在某種信號發(fā)生時(shí),調(diào)

23、用一個(gè)用戶函數(shù)。在用戶函數(shù)中,可執(zhí)行用戶希望對這種事件進(jìn)行的處理。如果捕捉到SIGCHLD信號,則表示子進(jìn)程已經(jīng)終止,所以此信號的捕捉函數(shù)可以調(diào)用waitpid以取得該子進(jìn)程的進(jìn)程ID以及它的終止?fàn)顟B(tài)。 (3) 執(zhí)行系統(tǒng)默認(rèn)動(dòng)作。對大多數(shù)信號的系統(tǒng)默認(rèn)動(dòng)作是終止該進(jìn)程。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程每一個(gè)信號都有一個(gè)缺省動(dòng)作,它是當(dāng)進(jìn)程沒有給這個(gè)信號指定處理程序時(shí),內(nèi)核對信號的處理。有5種缺省的動(dòng)作:異常終止(abort):在進(jìn)程的當(dāng)前目錄下,把進(jìn)程的地址空間內(nèi)容、寄存器內(nèi)容保存到一個(gè)叫做core的文件中,而后終止進(jìn)程。退出(exit):不產(chǎn)生core文件

24、,直接終止進(jìn)程。忽略(ignore):忽略該信號。停止(stop):掛起該進(jìn)程。繼續(xù)(continue):如果進(jìn)程被掛起,則恢復(fù)進(jìn)程的運(yùn)行。否則,忽略信號。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程信號的處理流程信號的處理流程 (1)信號被某個(gè)進(jìn)程產(chǎn)生,并設(shè)置此信號傳遞的對象(一般為對應(yīng)進(jìn)程的pid),然后傳遞給操作系統(tǒng);(2)操作系統(tǒng)根據(jù)接收進(jìn)程的設(shè)置(是否阻塞)而選擇性的發(fā)送給接收者,如果接收者阻塞該信號(且該信號是可以阻塞的),操作系統(tǒng)將暫時(shí)保留該信號,而不傳遞,直到該進(jìn)程解除對此信號的阻塞(如果對應(yīng)進(jìn)程已經(jīng)退出,則丟棄此信號);如果對應(yīng)進(jìn)程沒有阻塞,操作系統(tǒng)將

25、傳遞此信號;(3)目的進(jìn)程接收到此信號后,將根據(jù)當(dāng)前進(jìn)程對此信號設(shè)置的預(yù)處理方式,暫時(shí)終止當(dāng)前代碼的執(zhí)行,保護(hù)上下文(主要包括臨時(shí)寄存器數(shù)據(jù)、當(dāng)前程序位置以及當(dāng)前CPU的狀態(tài))、轉(zhuǎn)而執(zhí)行中斷服務(wù)程序,執(zhí)行完成后再恢復(fù)到被中斷的位置。當(dāng)然,對于可搶占式內(nèi)核,在中斷返回時(shí)還將引發(fā)新的調(diào)度。 2022-5-645第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程信號的生命周期信號處理信號產(chǎn)生信號注冊信號注銷內(nèi)核進(jìn)程用戶進(jìn)程2022-5-646第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程kill產(chǎn)生一個(gè)信號 kill()函數(shù)用來向指定進(jìn)程發(fā)送一個(gè)信號。此函數(shù)聲

26、明如下:/come from /usr/include/signal.hextern int kill (_pid_t _pid, int _sig)此函數(shù)的第一個(gè)參數(shù)為要傳遞信號的進(jìn)程號(PID),第二個(gè)參數(shù)即發(fā)送的信號值。 pid可以取以下幾種值:pido:將信號發(fā)送給進(jìn)程的PID值為pid的進(jìn)程。pid=0:將信號發(fā)送給和當(dāng)前進(jìn)程在同一進(jìn)程組的所有進(jìn)程。pid=-1:將信號發(fā)送給系統(tǒng)內(nèi)的所有進(jìn)程。pid0:將信號發(fā)送給進(jìn)程組號PGID為pid絕對值的所有進(jìn)程。如果成功完成返回值0,否則返回-1,并設(shè)置errno以指示錯(cuò)誤。2022-5-647第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于

27、信號、進(jìn)程、線程的編程#include #include void main(int argc,char *argv)int pid,signo;if(argc!=3)printf(usage: killsender pid signon);return;sscanf(argv1,%d,&pid); /獲取參數(shù)pidsscanf(argv2,%d,&signo); /獲取參數(shù)signoif(kill(pid,signo)0) /發(fā)送信號perror(kill);return;printf(ok: send out signal via kill system call!n);

28、2022-5-648例:編寫程序例:編寫程序killsender。通過。通過kill系統(tǒng)調(diào)用向指定進(jìn)程(系統(tǒng)調(diào)用向指定進(jìn)程(pid)發(fā)送信號。發(fā)送信號。第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程raise自舉一個(gè)信號 raise()函數(shù)用來給當(dāng)前進(jìn)程發(fā)送一個(gè)信號,即喚醒一個(gè)進(jìn)程。此函數(shù)聲明如下:/come from /usr/include/signal.h/*Raise signal SIG, i.e., send SIG to yourself. */extern int raise(int _sig)此函數(shù)相當(dāng)于采用以下方式執(zhí)行kill()函數(shù):if(kill(

29、getpid(), int _sig)=-1)perror(“raise”);2022-5-649第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:設(shè)計(jì)一個(gè)程序,創(chuàng)建一個(gè)子進(jìn)程,父進(jìn)程向子進(jìn)程發(fā)出信號,例:設(shè)計(jì)一個(gè)程序,創(chuàng)建一個(gè)子進(jìn)程,父進(jìn)程向子進(jìn)程發(fā)出信號,子進(jìn)程收到此信號,結(jié)束子進(jìn)程的運(yùn)行。子進(jìn)程收到此信號,結(jié)束子進(jìn)程的運(yùn)行。#include #include #include #include #include int main()pid_t result;int ret;result=fork();int newret;2022-5-650if(result0)p

30、error(fork);exit(EXIT_FAILURE);else if(result=0)raise(SIGSTOP);exit(0);elseprintf(childs pid=%dn,result);第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程if(waitpid(result,NULL,WNOHANG)=0)if(ret=kill(result,SIGKILL)=0)printf(kill function finished %d process with return value=%dn,result,ret);elseperror(kill);2022-

31、5-651第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程alarm()定時(shí) alarm()函數(shù)用來傳遞定時(shí)信號,即在多少時(shí)間內(nèi)產(chǎn)生SIGALRM信號,此函數(shù)每調(diào)用一次,產(chǎn)生一個(gè)信號,并不是循環(huán)產(chǎn)生SIGALRM信號。/come from /usr/include/unistd.hextern unsigned int alarm(unsigned int _seconds)此函數(shù)只有一個(gè)參數(shù),即在多少時(shí)間(秒)內(nèi)發(fā)送SIGALRM信號給當(dāng)前進(jìn)程,默認(rèn)情況下,當(dāng)進(jìn)程接受到alarm信號后將終止執(zhí)行;如果sec為0,則取消所有先前發(fā)出的報(bào)警請求。如果在調(diào)用alarm()函數(shù)前

32、沒有調(diào)用過alarm()函數(shù),如果執(zhí)行成功,將返回0,否則返回-1,并置errno標(biāo)致錯(cuò)誤。2022-5-652第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:alarm的使用#include #include int main()printf(first time return:%dn,alarm(4);sleep(1);printf(after sleep(1), remain:%dn,alarm(2);printf(renew alarm, remain:%dn,alarm(1);2022-5-653第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的

33、編程ualarm定時(shí) ualarm將使當(dāng)前進(jìn)程在指定時(shí)間(第一個(gè)參數(shù),以us為單位)內(nèi)產(chǎn)生SIGALRM信號,然后每隔指定時(shí)間(第二個(gè)參數(shù),以us為單位)重復(fù)產(chǎn)生SIGALRM信號。如果執(zhí)行成功將返回0,該函數(shù)聲明如下:extern _useconds_t ualarm(_useconds_t _value, _useconds_t _interval)2022-5-654第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程信號處理與signal安裝信號 信號處理辦法 :(1)忽略此信號。忽略此信號。大多數(shù)信號都可使用這種方式進(jìn)行處理,但有兩種信號不能被忽略,SIGKILL和S

34、IGSTOP。這兩種信號不能被忽略的原因是:它們向超級用戶提供一種使進(jìn)程終止或停止的可靠方法。(2)捕捉信號。捕捉信號。通知內(nèi)核在某種信號發(fā)生時(shí)調(diào)用一個(gè)用戶函數(shù)。在用戶函數(shù)中,可執(zhí)行用戶希望對這種事件進(jìn)行的處理,這需要安裝此信號。例如捕捉到SIGCHLD信號,則表示子進(jìn)程已經(jīng)終止,所以此信號的捕捉函數(shù)可以調(diào)用waitpid()以取得該子進(jìn)程的進(jìn)程PID以及它的終止?fàn)顟B(tài)和資源。(3)執(zhí)行系統(tǒng)默認(rèn)操作。執(zhí)行系統(tǒng)默認(rèn)操作。Linux系統(tǒng)對任何一個(gè)信號都規(guī)定了一個(gè)默認(rèn)的操作。 2022-5-655第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程signal安裝信號 typedef

35、void(*_sighandler_t)(int );extern _sighander_t signal(int _sig, sighandler_t _handler)此函數(shù)有兩個(gè)參數(shù), 第一個(gè)參數(shù)sig為接收到的信號,第二個(gè)參數(shù)為接收到此信號后的處理代碼入口或下面幾個(gè)宏:/* Fake signal functions. */#define SIG_ERR (_sighandler_t) -1) /*Error return. */#define SIG_DFL (_sighandler_t) 0) /*Default action. */#define SIG_IGN (_sighan

36、dler_t) 1) /*Ignore signal. */2022-5-656第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:編寫程序:例:編寫程序:killrecerver和和killsender。其中。其中killrecerver用于接用于接收收SIGUSR1(值為(值為10)信號,而)信號,而killsender通過通過kill系統(tǒng)調(diào)用向指系統(tǒng)調(diào)用向指定進(jìn)程(定進(jìn)程(pid)發(fā)送信號)發(fā)送信號。#include #include #include #include /SIGUSR1信號處理函數(shù)void CbSigUsr1(int signo) /輸出接收到的信號

37、信息printf(nreceive signal=%d.n,signo);2022-5-657第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程void main()/安裝SIGUSR1信號if(signal(SIGUSR1,CbSigUsr1)=SIG_ERR)perror(signal);return;printf(my pid is %dn,getpid();printf(waiting for SIGUSR1.n);/暫停,等待信號pause();2022-5-658第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:signal的應(yīng)用#inclu

38、de #include #include #include void fun_ctrl_c();int main()(void)signal(SIGINT,fun_ctrl_c);printf(Now Im starting.n);while(1)printf(this is an endless loop unless Ctrl+c are pressd!n);sleep(2);exit(0);2022-5-659第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:signal的應(yīng)用void fun_ctrl_c()printf(tCtrl+c were pressed!

39、n);printf(t This is just an example for signal function!n);printf(treset signal SIGINTn);(void)signal(SIGINT,SIG_DFL);2022-5-660第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程sigaction安裝信號 extern int sigaction(int _sig, struct sigaction *_act, struct sigaction *_oact)此函數(shù)的第一個(gè)參數(shù)為接收到的信號,第二、三個(gè)參數(shù)均為信號結(jié)構(gòu)sigaction(用于描述要

40、采取的操作及相關(guān)信息,見后續(xù)說明)變量。第二個(gè)參數(shù)用來指定欲設(shè)置的信號處理信息,第三個(gè)參數(shù)將返回執(zhí)行此程序前信號處理信息。如果第二個(gè)參數(shù)act不為空指針,則指定信號關(guān)聯(lián)的操作為此參數(shù)指向的結(jié)構(gòu)。如果參數(shù)oact不為空指針,則用來存儲以前設(shè)置的與此信號關(guān)聯(lián)的操作。如果參數(shù)act為空指針,則信號處理保持不變;因此,該調(diào)用可用于詢問對指定信號的當(dāng)前處理。2022-5-661第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程struct sigaction Struct sigactionunion_sighandler_t _sa_handler;void(*_sa_sigacti

41、on)(int , struct siginfo *, void *); _u;sigset_t sa_mask;unsigned long sa_flags;void(*sa_restorer)(void);#define sa_handler _u.sa_handler#define sa_sigaction _u._sa_sigaction2022-5-662第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:sigaction的應(yīng)用#include #include #include void myhandler(int sig);int main()struct

42、sigaction act,oact;act.sa_handler=myhandler;sigemptyset(&act.sa_mask);act.sa_flags=0;sigaction(SIGUSR1,&act,&oact);while(1)printf(hello world!n);pause();2022-5-663void myhandler(int sig)printf(the signal %d was caught.n,sig);第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程信號集與屏蔽信號 中斷是可以被屏蔽(阻塞)的(部分硬件中斷

43、是必須立即處理的,例如復(fù)位中斷),因此,Linux的信號是可以屏蔽,即阻塞信號。但這與前面提到的忽略是有區(qū)別的。 信號忽略:系統(tǒng)仍然傳遞該信號,只是相應(yīng)進(jìn)程對該信號不作任何處理而已。 信號阻塞:系統(tǒng)不傳遞該信號,顯示該進(jìn)程無法接收到該信號直到進(jìn)程的信號集發(fā)生改變。2022-5-664第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程sigprocmask設(shè)置進(jìn)程阻塞的信號集 extern int sigprocmask(int _how, _const sigset_t * _restrict_set, sigset_t * _restrict_oset)此函數(shù)第一個(gè)參數(shù)為更

44、改該集合的方式,如下所示:/come from /usr/include/asm/signal.h#define SIG_BLOCK 0 /*for blocking signals */#define SIG_UNBLOCK 1 /*for unblocking signals */#define SIG_SETMASK 2 /*for setting the signal mask */SIG_BLOCK 將第二個(gè)參數(shù)所描述的集合添加到當(dāng)前進(jìn)程阻塞的信號集中。SIG_UNBLOCK 將第二個(gè)參數(shù)所描述的集合從當(dāng)前進(jìn)程阻塞的信號集中刪除。SIG_SETMASK 無論之前的阻塞信號,設(shè)置當(dāng)前進(jìn)

45、程阻塞的集合為第二個(gè)參數(shù)描述的對象。2022-5-665第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程sigprocmask設(shè)置進(jìn)程阻塞的信號集 extern int sigprocmask(int _how, _const sigset_t * _restrict_set, sigset_t * _restrict_oset)如果set是空指針,則參數(shù)how的值沒有意義,且不會更改進(jìn)程的阻塞信號集,因此該調(diào)用可用于查詢當(dāng)前受阻塞的信號。執(zhí)行成功后,sigprocmask()返回0;否則返回-1,并設(shè)置errno以指明錯(cuò)誤,同時(shí)進(jìn)程的阻塞信號集將保持不變。2022-5-6

46、66第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:設(shè)置阻塞信號集#include #include #include #include #include void fun_ctrl_c();int main()int i;sigset_t set,pendset;struct sigaction action;(void)signal(SIGINT,fun_ctrl_c);2022-5-667第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:設(shè)置阻塞信號集if(sigemptyset(&set)0)perror(sigset init);

47、 exit(EXIT_FAILURE);if(sigaddset(&set,SIGINT)0)perror(add to set); exit(EXIT_FAILURE);if(sigprocmask(SIG_BLOCK,&set,NULL)0)perror(block set); exit(EXIT_FAILURE);elsefor(i=0;i5;i+)printf(now the signal was blocked by process!n);sleep(2);2022-5-668第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程例:設(shè)置阻塞信號集if(

48、sigprocmask(SIG_UNBLOCK,&set,NULL)0)perror(unblock);exit(EXIT_FAILURE);void fun_ctrl_c()printf(this is just an example, nothing was done!n);(void)signal(SIGINT,SIG_DFL);2022-5-669第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程等待信號 pause()函數(shù)將使當(dāng)前進(jìn)程處于等待狀態(tài),直到當(dāng)前進(jìn)程阻塞信號外任意一個(gè)信號出現(xiàn)。其函數(shù)聲明如下:extern int pause(void)此函數(shù)將掛起

49、當(dāng)前進(jìn)程,直到接收到一個(gè)信號后才重新恢復(fù)執(zhí)行。其始終返回-1并設(shè)置errno變量為EINTR.等待信號函數(shù)sigsuspend()聲明如下:extern int sigsuspend(_const sigset_t * _set)sigsuspend()函數(shù)將調(diào)用進(jìn)程阻塞的信號集替換為其參數(shù)值,然后掛起該進(jìn)程,直到傳遞一個(gè)非指定集合中的信號為止。2022-5-670第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程1、管道通信什么是管道?管道是單向的、先進(jìn)先出的,它把一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸出和另一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入連接在一起。寫進(jìn)程在管道的尾端寫入數(shù)據(jù),讀進(jìn)程在管道的首端讀出數(shù)據(jù)。5

50、.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程管道通信數(shù)據(jù)被一個(gè)進(jìn)程讀出后,將從管道中刪除,其它讀進(jìn)程將不能再讀到這些數(shù)據(jù)。管道提供了簡單的流控制機(jī)制。進(jìn)程試圖讀空管道時(shí),在有數(shù)據(jù)寫入管道前,進(jìn)程將一直阻塞。同樣,管道已經(jīng)滿時(shí),進(jìn)程再試圖寫管道,在其它進(jìn)程從管道中移走數(shù)據(jù)之前,寫進(jìn)程將一直阻塞。管道主要用于不同進(jìn)程間通信。5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程管道創(chuàng)建管道包括無名管道和有名管道兩種,前者用于父進(jìn)程和子進(jìn)程間的通信,后者可用于運(yùn)行于同一系統(tǒng)中的任意兩個(gè)進(jìn)程間的通信。無名管道由pipe()函數(shù)

51、創(chuàng)建:int pipe(int filedis2);當(dāng)一個(gè)管道建立時(shí),它會創(chuàng)建兩個(gè)文件描述符:filedis0用于讀管道, filedis1用于寫管道。返回值:成功返回零,否則返回-15.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程注意:fd0 用于讀取管道,fd1 用于寫入管道。圖1 linux中管道與文件描述符的關(guān)系第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程管道關(guān)閉管道關(guān)閉第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程管道讀寫管道主要用于不同進(jìn)程間通信。實(shí)際上,通常先創(chuàng)建一個(gè)管道,再通過fork函數(shù)創(chuàng)建

52、一個(gè)子進(jìn)程。關(guān)閉父進(jìn)程fd1 和 子進(jìn)程0第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程注意事項(xiàng)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章

53、 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2

54、 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.2 管道通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程總結(jié)第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號

55、、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5

56、章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程

57、的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.3 消息隊(duì)列通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、

58、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4.1 信號通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 進(jìn)程間的通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號

59、、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射

60、與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與共享內(nèi)存通信第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程第第5 5章章 關(guān)于信號、進(jìn)程、線程的編程關(guān)于信號、進(jìn)程、線程的編程5.4 內(nèi)存映射與

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論