殭屍進程,孤兒進程

  1. 殭屍進程和孤兒進程是父進程不調用wait時子進程可能的兩個狀態。編程

  2. 殭屍進程:殭屍進程是指子進程結束運行(exit(0)), 系統將會保留子進程的描述符信息(沒有被回收,其餘進程不能夠重用該描述符),而父進程沒有調用wait對退出的子進程進行處理。子進程成爲殭屍進程。查看命令ps打印其state可將有Z標誌。函數

  3. 孤兒進程:父進程沒有調用wait等待子進程退出。父進程結束後,子進程仍然在運行,此時子進程成爲孤兒進程。孤兒進程會被init進程捕獲到,並將init進程做爲本身的父進程,此時全部的清除操做將會交給init進程(init進程循環調用wait)。 所以,孤兒進程是無害的。code

  4. 解決殭屍進程的編程方法:首先父進程調用signal註冊一個一個信號處理函數處理信號SIGCHILD: signal(SIGCHILD, call_back),call_back中調用wait_pid.  子進程在退出時會發出SIGCHILD,被父進程捕獲後會調用call_back,完成對子進程描述符的回收操做,進程


  5. void call_back(int signo); 
    
    int main()
    {
        signal(SIGCHILD, call_back); 
        int pid = fork(); 
        if(pid==0)
        {
            //son thread; exit(0)
        }
        else
        {
            //father thread;
            //sleep(100000);        
        };
    }
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息