Linux下的SIGCHLD訊號

2021-08-03 07:12:29 字數 1139 閱讀 8560

在之前我們為了避免出現殭屍程序我們採用了兩種方式

1、呼叫wait()函式使父程序去等待子程序。wait()是一種阻塞等待

2、呼叫waitpid()函式這也是父程序去等待子程序而waitpid()分為阻塞式等待和非阻塞式等待,輪詢的方式就是建立在非阻塞等待的基礎之上的

而sigchld訊號也可以避免出現殭屍程序

建立殭屍程序

#include

#include

int main()

else

return

0;}

使用wait來解決殭屍程序

方式一:

採用wait()函式去等待

#include

#include

#include

#include

int main()

else

return

0;}

傳送乙個sigchld訊號

#include

#include

#include

#include

#include

void myhandler(int sig)

int main()

else

system("ps -o pid,ppid,state,tty,command");

return

0;}

但是這樣只處理了乙個殭屍程序

假如有多個殭屍程序呢,因為收到多個訊號,但是只記錄一次因此需要迴圈**.

因為如果是9個子程序都退出了,還有乙個沒有退出,但必須也要在最後乙個退出的時候給父程序傳送乙個sigchld訊號,因此要是非阻塞的

#include

#include

#include

#include

#include

void myhandler(int sig)

int main()

else

system("ps -o pid,ppid,state,tty,command");

return

0;}

Linux 竟態條件和SIGCHLD

乙個函式被多個執行流呼叫,有可能在第一次呼叫還沒返回時就再次進入函式,稱為重入。例如上面的insert函式,在執行第一步時收到訊號產生硬體中斷,轉去訊號處理函式,而訊號處理函恰好呼叫了insert函式,由於兩個函式操縱了同乙個鍊錶而產生意外的結果,所以這個函式是不可重入函式。如果這個函式只是操縱自己...

Linux下微信安裝教程

wget 3,把解壓的資料夾放在 opt下。sudo mv electronic wechat linux x64 opt electronic wechat linux x64sudo ln s opt electronic wechat linux x64 electronic wechat u...

linux下trap命令和SIGHUP訊號量詳解

trap命令用於指定在接收到訊號後將要採取的動作。常見的用途是在指令碼程式被中斷時完成清理工作。我在寫自動公升級指令碼的時候,為防止指令碼執行期間是不能允許其使用ctrl c等中斷退出的,故使用了trap命令。一 關於訊號 歷史上,shell總是用數字來代表訊號,而新de指令碼程式應該使用訊號de名...