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 相关文章推荐
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
jquery tools之tooltip
2009/07/25 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
JS实现“隐藏与显示”功能(多种方法)
2016/11/24 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
深入理解python对json的操作总结
2017/01/05 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python开启debug模式的方法
2019/06/27 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
Django中create和save方法的不同
2019/08/13 Python
Python Selenium截图功能实现代码
2020/04/26 Python
python pillow库的基础使用教程
2021/01/13 Python
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
英语自我评价范文
2014/01/24 职场文书
基层党员公开承诺书
2014/05/29 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
酒店温馨提示语
2015/07/14 职场文书