關於SIGCHLD與SIG IGN應用。

2021-07-02 01:50:42 字數 637 閱讀 1228

一、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程序去處理,省去了 大量殭屍程序占用系...