PHP多进程实例

news/2024/5/18 23:17:37
<?php
header('content-type:text/html;charset=utf-8' );

// 必须加载扩展
if (!function_exists("pcntl_fork")) {
    die("pcntl extention is must !");
}
//总进程的数量
$totals = 3;
// 执行的脚本数量
$cmdArr = array();
// 执行的脚本数量的数组
for ($i = 0; $i < $totals; $i++) {
    $cmdArr[] = array("path" => __DIR__ . "/run.php",  'pid' =>$i ,'total' =>$totals);
}

/*
展开:$cmdArr
Array
(
    [0] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 0
            [total] => 3
        )
    [1] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 1
            [total] => 3
        )
    [2] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 2
            [total] => 3
        )
)
*/

pcntl_signal(SIGCHLD, SIG_IGN);    //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
foreach ($cmdArr  as   $cmd) {
    $pid = pcntl_fork();    //创建子进程
    //父进程和子进程都会执行下面代码
    if ($pid == -1) {
        //错误处理:创建子进程失败时返回-1.
        die('could not fork');
    } else if ($pid) { //这里$pid>0
        //父进程会得到子进程号,所以这里是父进程执行的逻辑
        //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
        pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
    } else { //这里$pid=0
        //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
        $path   = $cmd["path"];
        $pid = $cmd['pid'] ;
        $total = $cmd['total'] ;
        echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
        exit(0) ;
    }
}
?>

http://www.niftyadmin.cn/n/3013104.html

相关文章

java 方法语句没有return 默认返回值,java 方法语句没有return 默认

java 方法语句没有return 默认[2021-01-31 22:25:50] 简介:Java中return语句有两个作用&#xff0c;分别是&#xff1a;(推荐教程&#xff1a;java入门程序)1、返回方法指定类型的值(这个值总是确定的)&#xff1b;2、结束方法的执行(仅仅一个return语句)。return语句用在非vo…

使用计算机正常工作必不可少,15春中国医科大学《计算机应用基础》在线作业...

中国医科大学《计算机应用基础》在线作业试卷总分&#xff1a;100 测试时间&#xff1a;--单选题包括本科的各校各科新学期复习资料&#xff0c;可以联系屏幕右上的“文档贡献者”一、单选题(共50 道试题&#xff0c;共100 分。单选题)V 1. 计算机断电后&#xff0c;会使存储的…

win10周年版eNSP中启动AR提示错误代码40问题

win 10操作系统中安装eNSP 1.2.00.380&#xff0c;一直运行正常&#xff0c;但在2016年11月升级win 周年版之后&#xff0c;启动AR时启动失败&#xff0c;提示错误代码40。卸载eNSP及VirtualBox之后重装问题依旧。按照论坛和网上各种说法更新virtualbox修改虚拟网卡设置&#x…

html中ul不在属于父级div,UL不以父div为中心

我试图将包含无序内联列表的div元素置于网页中心。我将包含div的边距设置为自动自动&#xff0c;正确地将div居中放在页面上&#xff0c;但是我无法找到一种方法来获取它包含的内联列表以在其中正确居中。内联列表在div内略微向左。我试着修理&#xff1a;padding&#xff1a;a…

Linux命令:for循环写法总结

for循环写法总结关于shell中的for循环用法很多&#xff0c;感觉很全面&#xff0c;所以就转过来研究研究&#xff0c;嘿嘿...1、 for((i1;i<10;i))[rootfox ~]# for ((i1;i<3;i )); do echo $(($i*4)); done482、在shell中常用的是 for i in $(seq 10) [rootfox ~]# for …

io密集型和cpu密集型_通过实例理解Java网络IO模型

来自&#xff1a;51CTO博客(作者&#xff1a;nxlhero)原文链接&#xff1a;https://blog.51cto.com/nxlhero/2442628网络IO模型里有多个概念比较难理解&#xff0c;本文通过用Java实现一个简单的redis&#xff0c;从最简单的单线程单连接到NIO与netty&#xff0c;介绍不同的IO模…

怎么用MATLAB做周期性预测,现在由一组离散的数据 具有周期性,怎么通过这些数据预测下面的情况?...

超级菜鸟求助&#xff0c;能不能帮我把这道题转化为lsqcurvefit来解&#xff1f;急&#xff01;function KineticsEst1_Diffclear allclc% 动力学数据t [0 20 40 60 120 180 300];CAm [10 8 6 5 3 2 1];% 用最小二乘样条拟合法计算微分dCA/dt--使用不经过实验点的…

计算机用户响应是,Windows7计算机响应缓慢的解决方案

我们都知道&#xff0c;长时间使用计算机总是会出现各种问题. 较常见的一种是计算机的响应速度变慢. 相信很多用户都遇到过这种情况&#xff0c;那么win7计算机的响应速度变慢了怎么办&#xff1f;今天&#xff0c;我将与您分享Win7计算机响应缓慢的解决方案.降低计算机响应速度…