zoukankan      html  css  js  c++  java
  • 服务器并发处理的时候如何避免僵尸进程的产生

    当服务器处理多个请求链接的时候,常用的做法是收到一个请求,服务器就fork一个子进程,

    如果父进程调用wait函数处理子进程结束时的状态信息,那么wait函数必须等待子进程的

    结束,这时同一时刻服务器就只能处理一个请求,如果考虑不使用wait函数,那么接受一个

    请求,结果就会产生一个僵尸进程,因为父进程一直fork,init进程也无法接管结束的子进

    ,这时候,因为一台服务器产生的进程数是有限的,不是无限的,而僵尸进程有必然会占

    据一个进程号,所以僵尸进程数目一定多的时候,会造成无法再处理新的请求链接。那么


    如何
    避免这种情况的发生呢,就是使用两次fork函数。


    伪代码:

    1. socket();
    2. bind();
    3. listen();
    4. while(1)
    5. {
    6. accept();
    7. while(1)
    8. {
    9. pid = fork();
    10. if(pid>0)
    11. {
    12. wait();
    13. }
    14. else if(pid==0)
    15. {
    16. pid2 = fork();
    17. if(pid2>0)
    18. {
    19. exit();
    20. }
    21. else if(pid2==0)
    22. {
    23. while(1)
    24. {
    25. process();//
    26. }
    27. close();
    28. exit();
    29. }
    30. }
    31. }
    32. }

    图示:


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





  • 相关阅读:
    scrapy 链接数据库创表语句
    工作问题总结
    插入排序
    centos6.5 安装python2.7.5
    冒泡排序
    [Python笔记]第十篇:模块续
    [Python笔记]第九篇:re正则表达式
    [Python笔记]第八篇:模块
    [Python笔记]第六篇:文件处理
    [Python笔记]第五篇:递归
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4555023.html
Copyright © 2011-2022 走看看