子程序的非同步等待方式

2021-08-02 13:26:13 字數 1116 閱讀 5147

一、子程序退出時會給父程序傳送訊號

預設的父程序對子程序的操作是忽略,而子程序退出時會向父程序傳送乙個訊號,我們現在要做的就是捕捉子程序退出時向父程序傳送的訊號。

**如下:

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 8 void catchsig(int sig)

9 12

13 int main()

14 22         else

23        

26         return 0;

27 }

執行結果:

由圖,前乙個pid為子程序當時的pid,後乙個pid為父程序的pid,子程序傳送資訊並退出,父程序接受子程序傳送的訊號,並捕捉訊號,顯示出來。

二、父程序等待子程序的非同步方式

父程序自定義處理函式,採用非阻塞方式等待,當子程序退出時,向父程序傳送訊號,父程序進行**,並反饋資訊。

**如下:

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 8 void catchsig(int sig)

9 16         else

17        

21     }while(1);

22 }

23 24 int main()

25 34         else

35        

41         }

42         return 0;

43 }

執行結果:

首先父程序做自己的工作,輸出do things,接著子程序退出並傳送訊號,父程序接著做自己的事情,四秒之後,等待成功,但由於只執行一次,所以後一次等待失敗,父程序依舊做自己的事情。到此程式結束,驗證完成。

子程序的非同步等待方式

通過之前所學的知識,我們可以了解到,通過wait函式或者waitpid函式可以清理殭屍程序,父程序可以通過兩種方式等待子程序,一種是阻塞方式,另一種是非阻塞方式,而不管是那種方式,父程序都做不到完全不理會子程序而去完成自己的動作,即子程序不能達到非同步等待的目的。一 sigchld訊號 1 關於si...

子程序的非同步等待方式

等待分為阻塞等待和非阻塞等待,我們非阻塞等待來實現非同步。1.子程序終止時會給父程序傳送sigchid訊號 2.為了驗證子程序在退出時確實向父程序傳送了sigchid訊號,我們對sigchid訊號進行捕捉。很顯然我們是捕捉到sigchid訊號的。3.wait 和waitpid 的區別 1 wait ...

子程序的非同步等待方式

原來只給大家介紹過殭屍程序,而沒有介紹殭屍程序是怎麼 的,今天就給大家介紹一下如何 殭屍程序。用wait和waitpid函式清理殭屍程序,父程序可以阻塞等待子程序結束,也可以非阻塞地查詢是否有子程序結束等待清理 也就是輪詢的方式 採用第一種方式,父程序阻塞了就不能處理自己的工作了 採用第二種方式,父...