美文网首页
进程管理

进程管理

作者: 朝圣的路上 | 来源:发表于2016-04-21 16:39 被阅读24次

    进程(process)通常可被归为父进程和子进程。

    父进程负责创建和结束子进程。子进程调用exit()并不能立即结束,会发SIGCHLD信号给父进程,以便父进程对资源进行回收。

    在子进程结束前,如果父进程已经结束,那也没有问题。你的子进程就变成了孤儿进程或者守护进程。系统init进程会充当父进程的角色对子进程进行管理和回收。

    父进程可以采用wait或waitpid等待已结束的子进程退出。如果父进程没有调用wait或waitpid来等待子进程退出。而且父进程一直运行,就会产生僵尸进程。这就是一个应该被避免的问题。

    通常父进程可以采用signal的方式来等待和回收子进程结束。示例如下:


    void
    sig_chld(int signo)
    {
        pid_t   pid;
        int     stat;
    
        while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
            printf("child %d terminated\n", pid);
        return;
    }
    

    int main()
    {
        Signal(SIGCHLD,sig_chld);
        ....
        if((child = fork()) == 0)
        {
        }
        else
        {
        }
        ....
    }
    

    相关文章

      网友评论

          本文标题:进程管理

          本文链接:https://www.haomeiwen.com/subject/dkmtrttx.html