1、wait()函式
原型:pid_t wait(int *status)
子程序退出時,它向父程序傳送乙個sigchld訊號,預設情況是總是忽略sigchld訊號,此時程序狀態一直保留在記憶體中,因此需要父程序去處理改訊號,處理的辦法則是呼叫wait()函式,收集子程序狀態資訊,並清空該資訊;
使用wait()來等待子程序終止執行稱為**程序;
當父程序忘了用wait()函式等待已終止的子程序時,子程序就會進入一種無父程序的狀態,此時子程序就是殭屍程序.wait()要與fork()配套出現,如果在使用fork()之前呼叫wait(),wait()的返回值則為-1,正常情況下wait()的返回值為子程序的pid.
如果先終止父程序,子程序將繼續正常進行,只是它將由init程序(pid 1)繼承,當子程序終止時,init程序捕獲這個狀態;
殭屍程序產生場景:父程序後於子程序退出,並且父程序中沒有使用wait()處理子程序的訊號;
程序間通訊之訊號
訊號是軟體中斷。很多比較重要的應用程式都需要處理訊號。訊號提供了一種處理非同步事件的方法。每個訊號都有乙個名字,並且他們的名字都是以sig開頭的。訊號的處理或相關動作有三種處理方式 1 預設訊號 sig dfl 2 忽略訊號 sig ign 大多數訊號可採用,除sigkill和sigstop外。3 ...
Linux程序間通訊之非同步訊號
在linux系統當中有62個訊號,可以通過 kill l 這個命令檢視如下圖所示 可以看到圖中的訊號分為兩個風格1 31是有獨自的名字,而34 64名字都是相同的。1 31是非實時訊號,34 64是實時訊號。關於訊號在man手冊中的第七本signal有詳細的說明。signal 忽略訊號,捕捉訊號,恢...
Linux 程序間通訊 訊號
訊號是在軟體層次上對中斷機制的一種模擬,在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的。訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。訊號是程序間通訊機制中唯一的非同步通訊機制,可以看作是非同步通知,通知接收訊號的程序有哪些...