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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
php使用include 和require引入文件的区别
Feb 16 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
vue组件间通信解析
2017/03/01 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
改进Django中的表单的简单方法
2015/07/17 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python ubplot使用方法解析
2020/01/10 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
经理职责范文
2013/11/08 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
大学生评语大全
2014/04/18 职场文书
爱护草坪标语
2014/06/24 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书