首页 > 代码库 > PHP 在linux环境下实现多进程,如何子类不产生defunct

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