php多进程实现 亲测

php多进程实现

PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后

1     cd php-version/ext/pcntl
2     phpize
3     ./configure && make && make install
4     cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so
5     echo "extension=pcntl.so" >> /etc/php.ini
6     /etc/init.d/httpd restart  

方便极了。

下面是示例代码:

 1     <?php
 2     header(‘content-type:text/html;charset=utf-8‘ );
 3
 4     // 必须加载扩展
 5     if (!function_exists("pcntl_fork")) {
 6         die("pcntl extention is must !");
 7     }
 8     //总进程的数量
 9     $totals = 3;
10     // 执行的脚本数量
11     $cmdArr = array();
12     // 执行的脚本数量的数组
13     for ($i = 0; $i < $totals; $i++) {
14         $cmdArr[] = array("path" => __DIR__ . "/run.php",  ‘pid‘ =>$i ,‘total‘ =>$totals);
15     }
16
17     /*
18     展开:$cmdArr
19     Array
20     (
21         [0] => Array
22             (
23                 [path] => /var/www/html/company/pcntl/run.php
24                 [pid] => 0
25                 [total] => 3
26             )
27
28         [1] => Array
29             (
30                 [path] => /var/www/html/company/pcntl/run.php
31                 [pid] => 1
32                 [total] => 3
33             )
34
35         [2] => Array
36             (
37                 [path] => /var/www/html/company/pcntl/run.php
38                 [pid] => 2
39                 [total] => 3
40             )
41
42     )
43     */
44
45     pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
46     foreach ($cmdArr  as   $cmd) {
47         $pid = pcntl_fork();    //创建子进程
48         //父进程和子进程都会执行下面代码
49         if ($pid == -1) {
50             //错误处理:创建子进程失败时返回-1.
51             die(‘could not fork‘);
52         } else if ($pid) {
53             //父进程会得到子进程号,所以这里是父进程执行的逻辑
54             //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
55             pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
56         } else {
57             //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
58             $path   = $cmd["path"];
59             $pid = $cmd[‘pid‘] ;
60             $total = $cmd[‘total‘] ;
61             echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
62             exit(0) ;
63         }
64     }
65     ?>  
时间: 2024-12-17 06:19:25

php多进程实现 亲测的相关文章

推荐几个hadoop搭建的几个好的博文,亲测成功!

内容包括hadoop单机版.伪分布式.分布式搭建方式以及在Eclipse上面安装hadoop插件配置hadoop,本菜亲测成功,希望对大家能产生帮助: http://www.cnblogs.com/kinglau/category/509016.html http://www.cnblogs.com/huligong1234/p/3533382.html http://aub.iteye.com/category/302369

Android蓝牙自动配对Demo,亲测好使!!!

蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 转载请注明出处http://blog.csdn.net/qq_25827845/article/details/52400782 经过最近一段时间得研究,针对网上给出的案例.总结了一个亲测好使的Demo. 说明如下: 1.本Demo用来连接蓝牙设备HC-05,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值. 2.将Demo安装在Android手机上,点击按钮,可以实现与目标蓝牙设备的自动

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的.只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查

Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)

写在前面: Django是一个卓越的新一代Web框架,相信使用Python的人对此并不陌生,但将我们完成的web应用布置到到服务器上并不是一件容易的事情. Django详细的教程可以参考http://python.usyiyi.cn/django/index.html. Django有自己的一个调试服务器,通过在项目文件夹下执行: python  manage.py runserver 8080(参数8080是设置的端口号,指明该服务器使用端口号为8080) 但是此语句也仅限在自己的机器上进行调

电脑IP改变后oracle em无法登陆的解决办法(亲测)

以下方法为本人亲测 情况:假设电脑初次安装oracle时的ip是192.168.133.110 那么进入em的地址就是http://192.168.133.110:1158/em/console/logon/logon 假设电脑的IP改变为192.168.88.66 那么进入em的地址应该是http://192.168.88.66:1158/em/console/logon/logon 但是测试后,输入上述地址无法进入em,原因是电脑ip改变了,oracle需要修改配置文件才可以访问,一般修改配

微信现金红包高级红包接口开发亲测

微信现金红包高级红包接口开发时遇到了不少问题,网上搜索发现 微信现金红包高级红包接口开发注意事项 这篇文章问题总结得很完整,里面给的demo是VS高版本写的,运行过程中还是有些参数问题对于首次调试来说有点难度,还有微信支付现金红包接口 的接口介绍,下面的几个问题特别提出: 商户证书,下载的demo需要证书才能正确运行(可调成服务器模拟发送),而证书需要安装到服务器上,demo是控制台程序,需要的证书可直接安装后使用,其中指出的是方法X509Certificate2 Find()中m_Subjec

亲测有效好用组件之启动屏react-native-splash-screen(一)

项目中经常会用到一些第三方组件,每次使用的时候网上找都能找到好多,一些好用,一些不好用, 现在将自己在项目中使用过的感觉还不错的组件记录下来,为了大家也为了自己以后节省一点测试探索的时间. 基本配置github里有详细的介绍react-native-splash-screen. 首先注明一下,这个亲测的RN版本是0.33. 配置的步骤和一般第三方组件差不多,这里就不再赘述.不同的地方就是在./android/app/src/res下面多了layout和drawable文件夹 如图所示 splas

ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path);与DirectoryInfo directory = new DirectoryInfo (Path);) 1获取文件信息 在知道文件相对路径的情形,下面代码可以获取文件的详细信息 1 public static void fileinfo(string Path) 2 { 3 Path = S

面试 企业shell编程基础问题解决实践(亲测)

问题是选的老男孩老师博客里面的问题,举一反三其中也自己也延伸了两题. 老男孩老师博客的地址http://oldboy.blog.51cto.com/2561410/1718607 言归正传, 1.请用shell或Python编写一个正方形,接收用户输入的数字. 方法:vim zhong1.sh #!/bin/bash read -p "Please Enter a number:" n  for ((x=1;x<=$n;x++));do     for ((y=1;y<=$