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实现长连接的方法与注意事项的问题
May 10 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
Nov 18 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
Laravel相关的一些故障解决
Aug 19 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 str_replace的替换漏洞
2008/03/15 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
详解vue axios二次封装
2018/07/22 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
解析Python中的异常处理
2015/04/28 Python
Python异常处理例题整理
2019/07/07 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
党员批评与自我批评
2014/02/12 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
大型会议策划方案
2014/05/17 职场文书
工作试用期自我评价
2015/03/10 职场文书
学校运动会感想
2015/08/10 职场文书
教学反思怎么写
2016/02/24 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Java 在线考试云平台的实现
2021/11/23 Java/Android