首页 > 系统相关 >php 多进程

php 多进程

时间:2022-09-01 18:45:09浏览次数:50  
标签:fork 孤儿 pid echo 退出 进程 php

cli模式下,可以多进程加速执行 (php-fpm下不适用,其多进程有自身的机制)

 

        // 这些变量也会fork到每个进程
        $pv = [];
        for ($i = 0; $i < 10; $i++) {
            $pv[] = $i * 10 + $i;
        }
        // print_r($pv);

        for ($i = 0; $i < 10; $i++) {
            $pid = pcntl_fork();
            // 上面这个语句会fork出一个子进程
            // 所有变量都被fork,例如子进程的$i,和主进程的$i已经完全是不同进程中的两个变量了
            
            // 此部分代码,在主进程、子进程都会执行
            // echo "公共区域$i ";

            // 下面这是主进程和子进程分别单独的代码
            if ($pid == 0) {
                echo "子进程 {$i} : {$pv[$i]} = ";
                echo $pid . "-children-" . time() . "-" . $i++ . PHP_EOL;

                // 如果退出,子进程自己终止了(不一定回收,见下面),循环也结束了
                // 如果不退出会继续复制 进程
                return;
            } else if($pid>0) {
                // echo $pid . "-parent-" . time() . "-" . $i . PHP_EOL;
                
                // 主进程执行完会退出
                // 子进程不会退出,会形成 孤儿进程 或者 僵尸进程
                // 孤儿进程    父进程已退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
          // 孤儿进程会被系统的init进程(pid=1)收养,init进程会成为这些子进程的新父进程。 // 孤儿进程一般没有什么危害,因为孤儿进程退出后,init进程会回收它的相关资源。 // 僵尸进程 子进程退出后,如果父进程还在运行,但父进程没有调用wait()或waitpid(),那么该子进程将无法被父进程回收,从而成为僵尸进程。
// 僵尸进程只能等到其父进程退出后由系统的init进程回收。 // 僵尸进程在其父进程不退出的情况下,会一直占用进程ID以及相关资源,无法释放,应尽量避免, // 解决办法:父进程循环调用pcntl_wait函数等到所有的子进程退出,从而避免孤儿进程和僵尸进程产生。 while (($pid = pcntl_wait($status)) > 0) { // echo "\n子进程[$pid]已退出, status = $status\n"; } } else{ echo "进程fork出错。\n"; } } // 因为子进程已经退出,以下的代码也仅主进程执行 echo "主进程已结束\n";

 

标签:fork,孤儿,pid,echo,退出,进程,php
From: https://www.cnblogs.com/mitang/p/16647482.html

相关文章

  • html+php 分类页面展示
    根据分类 展示不同页面:案例一:  案例二:   同宽度展示不同页面:if($child_cate_id){$hangye_pid=M("hangye")->where("status=1andcate......
  • 进程的状态与转换
    进程的状态与转换状态运行态:占有CPU就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行阻塞态(又称等待态):因等待某一事而暂时不能运行以上三种称为进程的......
  • 进程与线程基础
    1.一个进程可以理解为一个应用程序,一个进程通常包括多个线程。进程可以理解为一个公司,线程理解为公司的员工。2.进程A与进程B之间内存独立不共享线程A与线程B之间堆与方法......
  • php yield理解
    使用yield之前functionactionIndex($message='helloworld'){$valuesArray=[];//获取初始内存使用量echo'开始'.round(memory_get_usage()/102......
  • 进程间通信之匿名管道
    Linux手册中对匿名管道的描述如下:DESCRIPTIONpipe()createsapipe,aunidirectionaldatachannelthatcanbeusedforinterprocesscommunication.Thearray......
  • 2 linux多进程开发-进程基础
    进程状态进程创建父子进程进程退出孤儿进程、僵尸进程wait|waitpid  1.进程概述程序和进程程序是包含一系列信息的文件,这些信息描述了如何在运行时创建......
  • PHP文件操作
    //php读文件$data=file_get_contents('./1.txt');var_dump($data);//php写文件file_put_contents('./1.txt',date('Y-m-dH:i:s').PHP_EOL,FILE_APPEND);/**......
  • 线程和进程
    进程:是计算机资源分配的最小单元(进程为线程提供资源) 进程:是计算机中可以被cpu调度的最小单元(真正工作的最小单元)  注意:Linux系统使用底层fork;win:spawn;mac支持:for......
  • [网鼎杯 2020 朱雀组]phpweb-1|反序列化
    1、打开界面之后界面一直在刷新,检查源代码也未发现提示信息,但是在检查中发现了两个隐藏的属性:func和p,抓包进行查看一下,结果如下:2、对两个参数与返回值进行分析,我们使用d......
  • 驱动开发:摘链DKOM进程隐藏
    DKOM即直接内核对象操作,我们所有的操作都会被系统记录在内存中,而驱动进程隐藏就是操作进程的EPROCESS结构与线程的ETHREAD结构、链表,要实现进程的隐藏我们只需要将某个进......