僵尸进程,孤儿进程

  1. 僵尸进程和孤儿进程是父进程不调用wait时子进程可能的两个状态。

  2. 僵尸进程:僵尸进程是指子进程结束运行(exit(0)), 系统将会保留子进程的描述符信息(没有被回收,其他进程不可以重用该描述符),而父进程没有调用wait对退出的子进程进行处理。子进程成为僵尸进程。查看命令ps打印其state可将有Z标志。

  3. 孤儿进程:父进程没有调用wait等待子进程退出。父进程结束后,子进程仍然在运行,此时子进程成为孤儿进程。孤儿进程会被init进程捕获到,并将init进程作为自己的父进程,此时所有的清除操作将会交给init进程(init进程循环调用wait)。 因此,孤儿进程是无害的。

  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);        
        };
    }



你可能感兴趣的:(僵尸进程,孤儿进程)