php中pcntl_fork创建子进程的方法实例


Posted in PHP onMarch 14, 2019

一、php中pcntl_fork函数概述

pcntl_fork()函数是php中用于创建子进程的一个函数,返回创建的子进程的pid。

该函数创建子进程具体fork的过程:

(1)调用该函数即创建一个子进程,创建成功父进程返回子进程的pid,子进程返回0;
(2)创建子进程实际上对父进程的一个拷贝,共享代码空间,拷贝父进程的数据,也就是说父进程改变父进程的数据,子进程改变子进程的数据变量等;

二、示例代码分析

代码示例:

<?php
  $curr_pid = posix_getpid();//获取当前的进程id
  
  //将当前进程的id写入文件中
  echo '当前进程:'.$curr_pid.PHP_EOL;
  
  //开始创建子进程
  $son_pid = pcntl_fork();//返回子进程的id
 
  //查看当前进程
  echo '创建子进程之后当前的进程为:'.posix_getpid().PHP_EOL;
  
  //创建了子进程之后
  if($son_pid > 0){
    echo '子进程id:'.$son_pid.PHP_EOL;
  }

以上代码执行后结果为:

php中pcntl_fork创建子进程的方法实例

示例代码分析:

(1)发现创建了子进程之后,系统会切换到子进程中,而子进程中的代码是从含有pcntl_fork函数的那行执行的
(2)创建子进程之后,子进程的代码段是拷贝pcntl_fork函数及之后的代码段,之前的代码段并不拷贝,但是具体的数据变量子进程仍然会拷贝
(3)可见,fork之后程序会分叉执行,即子进程执行

三、pcntl_fork的业务场景举例

  1. php的多进程中,常用pcntl_fork来实现并发,多用于一些简单工具的实现。
  2. 例如监控工具,想要监控几个不同指标的情形,可以使用主进程监控各指标的配置变化,然后对每个指标分别fork一个子进程来监控其具体的情形,当主进程发现指标的配置改变则kill掉之前的子进程重新创建子进程进行监控。
  3. 主进程进行业务分发操作,子进程进行具体的业务逻辑执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php5.2时间相差8小时
Jan 15 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
header导出Excel应用示例
Jan 24 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 PHP
PHP7内核之Reference详解
Mar 14 #PHP
掌握PHP垃圾回收机制详解
Mar 13 #PHP
浅谈php的TS和NTS的区别
Mar 13 #PHP
浅谈PHP各环境下的伪静态配置
Mar 13 #PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 #PHP
Laravel事件监听器用法实例分析
Mar 12 #PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 #PHP
You might like
初识Laravel
2014/10/30 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php截取视频指定帧为图片
2016/05/16 PHP
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
javascript数组去重小结
2016/03/07 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python实现备份文件实例
2014/09/16 Python
浅谈Python peewee 使用经验
2017/10/20 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
python3实现猜数字游戏
2020/12/07 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
python实现淘宝购物系统
2019/10/25 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
英国在线泳装店:Simply Swim
2019/05/05 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
员工给公司的建议书
2019/06/24 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
python单元测试之pytest的使用
2021/06/07 Python
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers