Php多进程实现代码
php多进程实现
PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。
CentOS6下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后
cdphp-version/ext/pcntl phpize ./configure&&make&&makeinstall cp/usr/lib/php/modules/pcntl.so/usr/lib64/php/modules/pcntl.so echo"extension=pcntl.so">>/etc/php.ini /etc/init.d/httpdrestart
方便极了。
下面是示例代码:
__DIR__."/run.php",'pid'=>$i,'total'=>$totals); } /* 展开:$cmdArr Array ( [0]=>Array ( [path]=>/var/www/html/company/pcntl/run.php [pid]=>0 [total]=>3 ) [1]=>Array ( [path]=>/var/www/html/company/pcntl/run.php [pid]=>1 [total]=>3 ) [2]=>Array ( [path]=>/var/www/html/company/pcntl/run.php [pid]=>2 [total]=>3 ) ) */ pcntl_signal(SIGCHLD,SIG_IGN);//如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。 foreach($cmdArras$cmd){ $pid=pcntl_fork();//创建子进程 //父进程和子进程都会执行下面代码 if($pid==-1){ //错误处理:创建子进程失败时返回-1. die('couldnotfork'); }elseif($pid){ //父进程会得到子进程号,所以这里是父进程执行的逻辑 //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成: pcntl_wait($status,WNOHANG);//等待子进程中断,防止子进程成为僵尸进程。 }else{ //子进程得到的$pid为0,所以这里是子进程执行的逻辑。 $path=$cmd["path"]; $pid=$cmd['pid']; $total=$cmd['total']; echoexec("/usr/bin/php{$path}{$pid}{$total}")."\n"; exit(0); } } ?>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。