PHP函数pcntl_fork的理解与应用
来源:互联网 发布:linux系统shell 编辑:程序博客网 时间:2024/05/20 05:10
PHP进程分支函数
php社区对pcntl_fork的解释如下
pcntl_fork — 在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。-------pcntl_fork()函数创建一个子进程,这个子进程仅PID(进程号) 和PPID(父进程号)与其父进程不同。fork怎样在您的系统工作的详细信息请查阅您的系统 的fork(2)手册。------成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。
第一次看到这里,是非常容易迷惑的,写的示例也看不明白.
其实这里有一个很简单的方法可以立即理解这个函数
php内部究竟是怎么处理pcntl_fork的,并不重要,只要理解了这里pid的值即可.
基于以上,本人写了一段workman的进程创建代码,以供参考
workman的pcntl_fork部分代码(精简)
<?php$work = new work();work::forkWorks();print_r(work::$_works);print_r(work::$pidMap);class work { public static $_works = array(); public static $pidMap = array(); public $workId = 0; public $count = 4;// public $masterPid = 0; public function __construct() { $this->workId = spl_object_hash($this);//生成对象的唯一ID self::$_works[$this->workId] = $this; self::$pidMap[$this->workId] = array();// $this->masterPid = posix_getpid(); } public static function forkWorks() { foreach (self::$_works as $work) { while (count(self::$pidMap[$work->workId]) < $work->count) { self::forkOne($work); } } } public static function forkOne($work) { $pid = pcntl_fork(); //从这句话执行完,就分成两个进程,主进程(pid>0)和子进程(pid=0),两个进程获取到的pid不同 if ($pid > 0) { self::$pidMap[$work->workId][$pid] = $pid; } elseif ($pid == 0) { self::$_works[$work->workId] = $work; self::$pidMap = array(); while (TRUE){//这里写了死循环 sleep(1); ECHO 1; } exit; } else { } }}
阅读全文
0 0
- PHP函数pcntl_fork的理解与应用
- PHP函数pcntl_fork
- pcntl_fork和pcntl_fork 的用法
- pcntl_fork和pcntl_fork 的用法
- PHP多进程pcntl_fork
- php pcntl_fork 多进程僵尸进程的问题
- PHP连接mysql后pcntl_fork产生的错误
- fopen函数的理解与应用
- pcntl_fork实现PHP多进程
- pcntl_fork实现PHP多进程
- pcntl_fork实现PHP多进程
- PHP函数的理解
- 构造函数和复制构造函数的理解与应用
- 利用liunx的 crontab 和 php 的 pcntl_fork() 实现定时启动的多线程php程序
- 理解动态网页技术PHP与数组的应用
- PHP函数的应用
- 有关PHP函数:array_diff()与array_diff_assoc()的一些理解点
- pcntl_fork安装以及实现PHP多进程
- 在网页中调用摄像头实现拍照上传
- 玩转算法面试-数据规模,时间复杂度,均摊复杂度
- JDK自带工具keytool生成ssl证书
- 【Nim游戏】POJ2975[Nim]题解
- RabbitMQ与AMQP协议详解
- PHP函数pcntl_fork的理解与应用
- iOS程序国际化解决方案
- springboot学习笔记(十) RabbitMQ
- scikit-learn逻辑回归类库使用总结
- Power BI 学习笔记02
- NOIP2017赛前模拟 字符串(AC自动机)
- JavaScript函数——更深入的窥探
- maven的配置以及eclipse创建maven项目
- web前端开发框架那些事