进程管理

2016-04-21  本文已影响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
    {
    }
    ....
}

上一篇下一篇

猜你喜欢

热点阅读