zoukankan      html  css  js  c++  java
  • PHP 在linux环境下实现多进程,如何子类不产生defunct

    <?php
        //在程序需要分叉的时候,使用pcntl_fork()产生子进程,然后多线程同时执行任务
        $pid             = pcntl_fork();
        if($pdi < 0) 
            exit('fork error!');
    
        if($pid) {
            //如果pid大于0,那么是父进程,
            //这边让父进程直接个客户端返回数据,达到事实的效果
            # dothing
        }else {
            //子进程,让子进程进行复杂的业务逻辑。
            //让其睡眠100s
            sleep(100);
        }
    
        /*
            上面的这种方式,已经可以实现多线程同时处理,但是,子进程一直在跑,那么
                1,进程一直存在,linux系统会被其消耗致死
                2,客户端页面一直处于刷新页面,客户体验差
        */
    
        //解决问题:
                //子进程执行代码逻辑后,直接将其die() 或者 exit() 退出,那么可以释放其占用的资源。
                //但是产生了问题,产生n多defunct(僵尸进程)
    
        //那么如何消除僵尸进程呢
                //1,父类里面使用pcntl_wait(),让其等待子进程结束,将其回收。
                //2,在页面开始时定义,让系统自动回收僵尸进程(注:子进程结束后,必须die掉或者exit或者 exec('kill -9 ' . posix_getpid()))
                        pcntl_signal(SIGCLD, SIG_IGN);
                        pcntl_signal(SIGCHLD,SIG_IGN);
  • 相关阅读:
    树型表的设计 上海
    FTP通讯封装 上海
    线程淡写 上海
    TCP通讯故障 上海
    设计模式引导 上海
    初试Delegate 上海
    c# 扫描端口 上海
    攻读计算机研究生的看法(转载) 上海
    挖掘表字段中的汉字 上海
    新生活运动 上海
  • 原文地址:https://www.cnblogs.com/lxdd/p/3894819.html
Copyright © 2011-2022 走看看