资讯专栏INFORMATION COLUMN

php中pcntl_fork创建子进程

褰辩话 / 1543人阅读

摘要:一中函数概述函数是中用于创建子进程的一个函数,返回创建的子进程的。主进程进行业务分发操作,子进程进行具体的业务逻辑执行。

一、php中pcntl_fork函数概述

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

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

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

二、示例代码分析

代码示例:

 0){
       //父进程fork成功返回子进程的id,此为父进程的执行逻辑
       echo "子进程id:".$son_pid.PHP_EOL;
   }elseif($son_pid = 0){
       //子进程fork后返回的pid是0,因此为子进程执行逻辑
   }else{
       //$son_pid=-1的时候,代表fork子进程失败
   }

以上代码执行后结果为:

示例代码分析:

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

三、pcntl_fork的业务场景举例

php的多进程中,常用pcntl_fork来实现并发,多用于一些简单工具的实现。

例如监控工具,想要监控几个不同指标的情形,可以使用主进程监控各指标的配置变化,然后对每个指标分别fork一个子进程来监控其具体的情形,当主进程发现指标的配置改变则kill掉之前的子进程重新创建子进程进行监控。

主进程进行业务分发操作,子进程进行具体的业务逻辑执行。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31006.html

相关文章

  • PHP的pcntl进程控制教程一(pcntl_fork)

    摘要:说明函数创建一个子进程,这个子进程仅进程号和父进程号与其父进程不同。返回值成功时,在父进程执行线程内返回产生的子进程的,在子进程执行线程内返回。失败时,在父进程上下文返回,不会创建子进程,并且会引发一个错误。 pcntl 简介 PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在Web服务器环境,当其被用于Web服务环境时可能会...

    LeexMuller 评论0 收藏0
  • PHP进程编程

    摘要:输出结果子进程回收阻塞方式刚刚有么一般我习惯用加上命令来查找运行着的后台进程。还有一种方法,既可以回收已经结束的子进程,又可以并行。但是这个时候,子进程会被交给号进程,号进程成为了这些子进程的继父。 使用多进程的优点: 1. 使用多进程, 子进程结束以后, 内核会负责回收资源 2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. ...

    lieeps 评论0 收藏0
  • workerman笔记-php建守护进程

    摘要:守护进程常常在系统引导装入时启动,在系统关闭时终止。进程组有进程组来唯一标识。且该进程组不会因组长进程的退出而受到影响。 使用函数 pcntl_fork();//创建子进程 posix_setsid();//设置当前进程为进程组长 posix_getpid();//获取进程id 例子 workerman中将进程 /** * Run as deamon mode. * * @th...

    Cristic 评论0 收藏0
  • 守护进程PHP实现

    摘要:什么是守护进程守护进程是一种特殊的进程,它的生命周期很长,它在后台运行并且没有控制终端这样可以保证守护进程不会接收到各种来自终端的信号。比如等,都会使用守护进程的形式运行,确保可以一直正常的提供服务。 什么是守护进程 守护进程(daemon)是一种特殊的进程,它的生命周期很长,它在后台运行并且没有控制终端(这样可以保证守护进程不会接收到各种来自终端的信号)。比如:crontab、ssh...

    lily_wang 评论0 收藏0
  • PHP进程系列笔记(一)

    摘要:用于创建子进程。该函数阻塞当前进程,只到当前进程的一个子进程退出或者收到一个结束当前进程的信号。注意处需要注意子进程需要防止子进程也进入循环。如果没有,最终创建的子进程不只个。 本系列文章将向大家讲解pcntl_*系列函数,从而更深入的理解进程相关知识。 PCNTL在PHP中进程控制支持默认是关闭的。您需要使用 --enable-pcntl 配置选项重新编译PHP的 CGI或CLI版本...

    ddongjian0000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<