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);

PHP 在linux环境下实现多进程,如何子类不产生defunct,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。