關於SIGCHLD與SIG_IGN應用。

一、SIGCHLD是unix的一種信號。
SIGCHLD信號是子進程結束時,向內核發送的信號。
無論進程是正常終止,還是不正常終止,都會向內核發送SIGCHLD信號。
如果父進程不等待子進程結束,子進程將有可能成爲殭屍進程(zombie)從而佔用系統資源。因此需要對SIGCHLD信號做出處理,回收殭屍進程的資源,避免造成不必要的資源浪費。
可以用如下語句:
signal(SIGCHLD,(void *)handle);
handle此處代表一個處理 SIGCHLD信號,引起的函數。
但是在一些併發性特別高的服務器端,有時候又需要對此信號進行忽略。因爲,每一個子進程終止時都會向內核發送此信號,如果併發性特別多,將影響服務器處理速率。
可以用如下語句
signal(SIGCHLD,SIG_IGN );

      signal(SIGCHLD, SIG_IGN); //忽略SIGCHLD信號,這常用於併發服務器的性能的一個技巧

     //因爲併發服務器常常fork很多子進程,子進程終結之後需要服務器進程去wait清理資源。如果將此信號的處理方式設爲忽略,可讓內核把殭屍子進程轉交給init進程去處理,省去了大量殭屍進程佔用系統資源。

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章