捕捉SIGCHLD,處理僵死程序

2021-06-22 16:23:44 字數 500 閱讀 5697

在linux/unix系統中,當程序結束時,核心會釋放程序占用的所有資源:占用的記憶體、開啟的檔案等,但是仍保留一些資訊:程序id、退出狀態、執行時間,這些資訊等著父程序來去(條用wait/waitpid),在父程序取走之前,子程序稱為僵死程序。

為了防止僵死程序,父程序可以阻塞等待子程序結束,這是這樣父程序就不能做自己的工作。

父程序也可以採用「輪詢」的方式來呼叫wait/waitpid,但是這樣設計程式可能會過於複雜。

子程序終止會給父程序傳送sigchld訊號,父程序可以捕捉這個訊號,在訊號處理程式中條用wait/waitpid

#include#include#include#include#include/*訊號處理函式*/ 

void sighandler(int sig)

void initsig()

int main()

if(pid>0)

return 0;

}

linux 僵死程序的處理

1.僵死程序 程序呼叫exit後,儲存區已經釋放,描述符已經關閉後,核心還為每乙個程序保留了一定資訊 程序id 終止狀態 使用的cpu時間等 需要其父程序呼叫wait waitpid。若父程序沒有對其呼叫wait。則子程序就是僵死程序。如果父程序先於子程序結束,則該子程序父程序變成了init 1號程...

Linux 僵死程序及其處理方法

首先核心會釋放終止程序 呼叫了exit系統呼叫 所使用的所有儲存區,關閉所有開啟的檔案等,但核心為每乙個終止子程序儲存了一定量的資訊。這些資訊至少包括程序id,程序的終止狀態,以及該程序使用的cpu時間,所以當終止子程序的父程序呼叫wait或waitpid時就可以得到這些資訊。而殭屍程序就是指 乙個...

SIGCHLD訊號處理

在apue這本書中,介紹了早期system v不可靠訊號中sigcld的經典語義。如在rh7.2上編譯並執行該程式則一切正常 不會出現重複列印 sigcld received 因為 1 現今的unices系統 包括linux 都提供了可靠的訊號機制.2 linux rh7.2,kernel 2.4....