Welcome to Rooeye's blog

服务器并发处理如何避免僵尸进程

c/c++ rooeye 574℃ 0评论
当服务器处理多个请求链接的时候,常用的做法是收到一个请求,服务器就fork一个子进程,如果父进程调用wait函数处理子进程结束时的状态信息,那么wait函数必须等待子进程的结束,这时同一时刻服务器就只能处理一个请求,如果考虑不使用wait函数,那么接受一个请求,结果就会产生一个僵尸进程,因为父进程一直fork,init进程也无法接管结束的子进程,这时候,因为一台服务器产生的进程数是有限的,不是无限的,而僵尸进程有必然会占据一个进程号,所以僵尸进程数目一定多的时候,会造成无法再处理新的请求链接。那么如何避免这种情况的发生呢,就是使用两次fork函数。

socket();
bind();
listen();
while(1)
{
    accept();
    while(1)
    {
        pid = fork();
        if(pid2>0)
        {
            wait();
        }
        else if(pid==0)
        {
            pid2 = fork();
            if(pid2>0)
            {
                exit();
            }
            else if(pid2==0)
            {
                while(1)
                {
                    process();//
                }
                close();
                exit();
            }
        }
    }
}

图示:

这样就能够保证1快速处理多个请求链接,而且不会有僵尸进程的产生

 

 

 

 

 

来自为知笔记(Wiz)

 

转载请注明:寻梦人博客 » 服务器并发处理如何避免僵尸进程

喜欢 (1)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址