實驗-Linux進程管理-進程通信.pptx_第1頁
實驗-Linux進程管理-進程通信.pptx_第2頁
實驗-Linux進程管理-進程通信.pptx_第3頁
實驗-Linux進程管理-進程通信.pptx_第4頁
實驗-Linux進程管理-進程通信.pptx_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LINUX進程管理-進程通信2軟中斷軟中斷是對硬件中斷的一種模擬,發送軟中斷就是向接收進程的task_struct結構中的相應項發送一個信號。接收進程在收到軟中斷信號后,將按照事先的規定去執行一個軟中斷處理程序。但,軟中斷處理程序不像硬中斷處理程序那樣,收到中斷信號后被啟動,它必須等到接收進程執行時才生效。另,一個進程也可以對自己發送軟中斷信號,以便在某些特殊情況下,進程能轉入規定好的處理程序。34Linux進程低級通信Linux提供了同步、互斥及軟中斷的系統調用/庫函數:lockf(fd,function,size) 可用于互斥fcntl 文件控制函數(根據文件描述詞來操作文件的特性)。 w

2、ait() 用于父子進程間的同步sleep(n) 使當前進程睡眠n秒后自動喚醒自己kill(pid,sig)傳遞軟中斷信號signal(sig,func)接收軟中斷信號5軟中斷信號預置函數signal (sig , function)sig 系統給定的軟中斷信號中的序號或名稱。function 與軟中斷信號關聯的函數名,當進程在運行過程中捕捉到指定的軟中斷信號后,中斷當前程序的執行轉到該函數執行。注意:軟中斷信號必須提前預置,然后才可以在程序運行中捕獲。6發送軟中斷信號函數 int kill ( pid , sig )pid表示一個或一組進程的標識符:當pid0時,將信號發送給指定pid的進程

3、;當pid=0時,將信號發送給同組的所有進程;當pid=-1時,將信號發送給以下所有滿足條件的進程:該進程用戶標識符等于發送進程有效用戶標識符; sig軟中斷信號的序號或名稱功能:向指定進程標識符pid的進程發軟中斷信號sig。本章中用來實現父進程給子進程發終止執行軟中斷信號。 頭文件:#include#include7例 編一程序實現循環顯示字符串“Hello!”,當鍵盤鍵入Ctrl+C時終止循環,顯示“OK!”后結束。分析:根據題意查系統的軟中斷信號表可知,需要定義的軟中斷信號序號為2,名稱為SIGINT,其對應的軟中斷處理函數的功能是修改循環變量的值,使其中斷返回后終止循環顯示。8#in

4、cludeint k;/定義循環變量void int_func(int sig)/定義軟中斷處理函數k=0;/修改循環變量的值為0main()signal(SIGINT int_func);/預置軟中斷信號處理函數k=1;/*循環顯示,等待鍵入Ctrl+c后轉軟中斷處理函數執行*/while(k=1)printf(Hello!n);printf(“OK!n”);/軟中斷處理函數返回后退出循環exit(0);9上機練習軟中斷1編寫一個程序循環輸出“how are you?”,當鍵盤輸入Ctrl+C時終止,當輸出次數不超過350次時在此過程中使用Ctrl+C不能中斷顯示,350次后才能用Ctrl+

5、C中斷顯示,然后輸出“Byebye”.10在進程同步中,使用exit()和wait()實現了父進程等子進程終止的同步,但是這種同步方法不能實現子進程對父進程的等待。要實現子進程對父進程的等待可以使用父進程向子進程發軟中斷信號,子進程接收信號的方式實現。這兩種同步方式相結合,可以實現父子父的同步序列。11實現父子父同步的步驟如下:子進程使用signal()預置軟中斷處理函數,然后等待父進程發軟中斷信號;父進程中使用kill()發軟中斷信號給子進程,再用wait(0)等待子進程結束;子進程接收到軟中斷信號后轉去執行中斷處理函數子進程在中斷處理返回后,使用exit(0)終止執行,向父進程發終止信息。

6、父進程使用wait(0)接收到子進程的終止信息后結束等待,并終止自己的程序的執行。12例 父子進程同步要求如下:父進程創建一個子進程,在父進程中顯示3行How are you ! 然后發軟中斷信號給子進程,再等待子進程終止后輸出結束信息OK!,然后終止執行。子進程中循環顯示Im child ,當接收到父進程發來的軟信號后停止循環,顯示Child exited! 并終止執行。它們之間的同步關系是:子進程在循環顯示中等待父進程發出的軟中斷信號,并輸出結束信息,然后結束;父進程等待子進程結束后輸出結束信息,然后結束。13#includeint k1; /定義全局變量k1void int_fun1(i

7、nt sig) /定義軟中斷處理函數 k1=0;main() int k,p1; while(p1=fork()=-1); /創建子進程 if(p10) /父進程返回 for(k=1;k4;k+) /顯示3行信息 printf(How are you !n); sleep(1); kill(p1,12); /發軟中斷信號給子進程 wait(0); /等子進程終止14 printf(OK!n); /輸出結束信息 exit(0); else /子進程返回 signal(12,int_fun1); /預置軟中斷信號 k1=1; while(k1=1) /*循環顯示并等待父進程發軟中斷信號*/ printf( Im childn ); sleep(1); printf( Child exited!n );/子進程結束信息 exit(0); /子進程終止 15上機練習軟中斷2使用軟中斷實現父子進程同步,父進程先輸出A,然后子進程輸出B。16上機練習 軟中斷3編寫程序完成:父進程生成兩個子進程P1,P2父進程從鍵盤接收DELETE中斷信號然后父進程使用系統調用向兩個子進程分別發送中止執行信號SIGUSR1和SIGUSR2子進程收到各自的信號后分別

溫馨提示

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

評論

0/150

提交評論