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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。