文档章节

Linux下实现PHP多进程

mickelfeng
 mickelfeng
发布于 2013/01/03 00:41
字数 428
阅读 11
收藏 0

多进程:使用PHP的Process Control Functions(PCNTL/线程控制函数)
函数参考可见:http://www.php.net/manual/zh/ref.pcntl.php
只能用在Unix Like OS,Windows不可用。
编译php的时候,需要加上–enable-pcntl,且推荐仅仅在CLI模式运行,不要在WEB服务器环境运行。

以下为简短的测试代码:

<?php
declare(ticks=1);
$bWaitFlag= FALSE;/// 是否等待进程结束
$intNum= 10;          /// 进程总数
$pids=array();       ///  进程PID数组

echo("Start\n");

for($i= 0;$i<$intNum;$i++) {

  $pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息

  if(!$pids[$i]) {
    // 子进程进程代码段_Start
    $str="";
    sleep(5+$i);
    for($j=0;$j<$i;$j++) {$str.="*";}
    echo"$i -> ". time() ." $str \n";
    exit();
    // 子进程进程代码段_End
  }

}
if($bWaitFlag)
{
  for($i= 0;$i<$intNum;$i++) {
    pcntl_waitpid($pids[$i],$status, WUNTRACED);
    echo"wait $i -> ". time() ."\n";
  }
}
echo("End\n");
?>

结果:

$ /Applications/XAMPP/bin/php http_fork.php 
Start
End
putclubde:workerman_mickelfeng putclub$ ps -ef |grep php
  501  1472     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1473     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1474     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1475     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1476     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1477     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1478     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1479     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1480     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1481     1   0  9:35下午 ttys001    0:00.00 /Applications/XAMPP/bin/php http_fork.php
  501  1483   298   0  9:35下午 ttys001    0:00.00 grep php
$ 0 ->1525786523  
1 ->1525786524 * 
2 ->1525786525 ** 
3 ->1525786526 *** 
4 ->1525786527 **** 
$ 5 ->1525786528 ***** 
6 ->1525786529 ****** 
7 ->1525786530 ******* 
8 ->1525786531 ******** 
9 ->1525786532 ********* 

 

 

本文转载自:

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 226
博文 2589
码字总数 562007
作品 0
成都
高级程序员
PHP多进程开发与Redis结合实践

业务逻辑介绍: 用户在 APP 上发帖子,然后存储到 Redis 的 List 列表中 利用 Linux 的 crontab 定时任务功能,按秒请求执行PHP脚本文件(processNewsRedisList.php) 调用 redis_process 处理...

老K8
06/21
0
0
PHP Socket 编程进阶指南

学习准备 Linux 或者 Mac 环境; 安装有 Sockets 扩展; 了解 TCP/IP 协议。 socket函数只是PHP扩展的一部分,编译PHP时必须在配置中添加 配置项来启用。 如果自带的PHP没有编译scokets扩展,...

飞鸿影~
07/11
0
0
PHP 的异步并行和协程 C 扩展 - Swoole

PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器...

matyhtf
2014/03/03
0
12
几个 Windows 到 Linux 的代码移植问题

1、在 Linux 实现 Win32 API 之 GetTickCount 函数 为了将 Windows 中的 GetTickCount API 函数移植到 Linux,可以使用如下的代码: long GetTickCount() 2、Windows 和 Linux 系统关于 itoa...

雅各宾
2013/07/17
0
0
关于win7与虚拟机LINUX互通问题

首先,介绍如何在VMWARE中设置LINUX的网络。一般网络选项有Bridged, NAT, host-only几种。本次以我实现的host-only为样本来做详细说明,如下图: 在选择host-only模式之后,打开VMWARE的网络...

Sandy_wu
2013/03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
34分钟前
0
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
1
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
4
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部