一、sigchld是unix的一種訊號。
sigchld訊號是子程序結束時,向核心傳送的訊號。
無論程序是正常終止,還是不正常終止,都會向核心傳送sigchld訊號。
如果 父程序不等待子程序結束,子程序將有可能成為
殭屍程序(zombie)從而占用系統資源。因此需要對sigchld訊號做出處理,**
殭屍程序的資源,避免造成不必要的資源浪費。
可以用如下語句:
signal(sigchld,(void *)handle);
handle此處代表乙個處理 sigchld訊號,引起的函式。
但是在一些併發性特別高的伺服器端,有時候又需要對此訊號進行忽略。因為,每乙個子程序終止時都會向核心傳送此訊號,如果併發性特別多,將影響伺服器處理速率。
可以用如下語句
signal(sigchld,sig_ign );
signal(sigchld, sig_ign); //忽略sigchld訊號,這常用於併發伺服器的效能的乙個技巧
//因為併發伺服器常常fork很多子程序,子程序終結之後需要
伺服器程序去wait清理資源。如果將此訊號的處理方式設為
忽略,可讓核心把殭屍子程序轉交給init程序去處理,省去了
大量殭屍程序占用系統資源。
system呼叫與SIGCHLD訊號
很多時候,我們需要通過system這個函式在程式內部來執行系統命令。比如 int rv system mount mnt hgfs 最近有同事發現system呼叫返回 1,但事實上外部命令已成功執行。經調查發現,原來是server在啟動後將自己設定為daemon時,遮蔽了sigchld訊號導致的。在...
SIGCHLD訊號與程序非同步等待
首先,讓我們先來回顧一下有關程序等待的知識。所謂程序等待,說的就是父程序等待子程序 如圖,父程序呼叫wait和waitpid函式等待子程序,從而清理系統中的殭屍程序。在此過程中,父程序可以阻塞等待子程序結束,也可以非阻塞地查詢是否有子程序結束等待清理 也就是輪詢的方式 若採用阻塞等待方式,父程序就不...
SIGCHLD訊號與SIG IGN處理的使用
signal sigchld,sig ign 忽略sigchld訊號,這常用於併發伺服器的效能的乙個技巧 因為併發伺服器常常fork很多子程序,子程序終結之後需要 伺服器程序去wait清理資源。如果將此訊號的處理方式設為 忽略,可讓核心把殭屍子程序轉交給init程序去處理,省去了 大量殭屍程序占用系...