首页 > 代码库 > 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);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。