linux SIGCHLD SIG_IGN

一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用 wait 或 waitpid
獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之爲殭屍進程。

子進程在退出時候會給父進程發送SIGCHLD 信號, 

 

 

1)父進程要不然會一直等待wait() ,等待子進程退出,回收資源,

2) 要不父進程會異步執行其他任務, 在收到SIGCHLD 信號時候,處理該信號,然後回收資源。

3)如果父進程創建出子進程後就不想管子進程了,可以顯示調用sigaction, 將該信號註冊爲SIG_IGN

     這個信號是一個特例信號, 默認的SIG_IGN 處理和顯示的SIG_IGN 不同。默認的會有殭屍進程, 顯示的則不會。

 

如果用signal 函數來註冊信號處理函數,那麼在該信號處理函數裏面應該繼續註冊該信號,否則該信號有可能只處理一次。

最好使用sigaction來代替signal註冊信號。

    struct sigaction sa;
    sa.sa_handler = sigint_handler;
    sigemptyset(&sa.sa_mask);
 
    if (sigaction(SIGINT, &sa, NULL) == -1) {
        perror("sigaction:");
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章