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 相关文章推荐
php桌面中心(四) 数据显示
Mar 11 PHP
php 文件上传实例代码
Apr 19 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
PHP中的Streams详细介绍
Nov 12 PHP
php文件读取方法实例分析
Jun 20 PHP
php微信开发之音乐回复功能
Jun 14 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
php去除deprecated的实例方法
Nov 17 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
php curl选项列表(超详细)
2013/07/01 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
php简单的上传类分享
2016/05/15 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
JS中的作用域链
2017/03/01 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
python根据日期返回星期几的方法
2015/07/06 Python
python+opencv实现动态物体识别
2018/01/09 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
空指针到底是什么
2012/08/07 面试题
竞聘演讲稿范文
2014/01/12 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
毕业晚会主持词
2014/03/24 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
老乡会致辞
2015/07/28 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
Java版 简易五子棋小游戏
2022/05/04 Java/Android