0

0

PHP如何开启pcntl模块并实现多进程编程呢?

王林

王林

发布时间:2019-08-29 14:38:38

|

4994人浏览过

|

来源于博客园

转载

先查看下我安装的php版本

PHP 7.3.7 (cli) (built: Jul 12 2019 22:25:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies

php实现多进程需要安装pcntl模块,这个模块是php官方提供的,所以我们可以在PHP源码中找到,下载 php7.3.7 源码并解压到  /home 目录下,这时我们需要的扩展 pcntl 在  /home/php-7.3.7/ext/pcntl 

依次执行以下命令

phpize
./configure --with-php-config=/usr/local/bin/php-config
make & make install

这里面确定 php-config 文件的路径可以使用   find / -name php-config   最后生成 pcntl.so 文件。

然后找到 php的ini文件所在路径 可以使用   php --ini   命令查看

立即学习PHP免费学习笔记(深入)”;

至于php的扩展模块路径可以使用  php -i | grep extension_dir   查看,然后将生成的so文件拷到模块路径下并且将  extension=pcntl  加到php.ini文件中

使用 php -m 查看模块是否被加载!到这里pcntl 模块就安装好啦,下面开始编码

for ($i = 0; $i < 3; $i++){   
    $pid = pcntl_fork();
     if ($pid == -1) {
        die("开启进程失败");
    } elseif ($pid) { 
         echo "启动子进程 $pid \n";
    } else {
      echo "子进程 ".getmypid()." 正在处理任务\n";
      sleep(rand(5,10));
      exit;
    }
}

while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);    
    echo "子进程推出,状态码 $status \n";
}

pcntl_fork()函数创建一个子进程,成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。

pcntl_waitpid() — 等待或返回fork的子进程状态,挂起当前进程的执行直到参数pid指定的进程号的进程退出, 或接收到一个信号要求中断当前进程或调用一个信号处理函数。返回的值可以是-1,0或者 >0的值, 如果是-1, 表示子进程出错, 如果>0表示子进程已经退出且值是退出的子进程pid,至于如何退出, 可以通过$status状态码反应

root@4226aaf8d937:/home/demo# php index.php 
启动子进程 150 
启动子进程 151 
启动子进程 152 
子进程 152 正在处理任务
子进程 151 正在处理任务
子进程 150 正在处理任务
子进程推出,状态码 0 
子进程推出,状态码 0 
子进程推出,状态码 0
root@4226aaf8d937:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   3976  3180 pts/0    Ss   04:42   0:00 bash
root        17  0.0  0.3   3868  3184 pts/1    Ss   04:48   0:00 bash
root       149  0.3  2.1  79740 21888 pts/0    S+   06:18   0:00 php index.php
root       150  0.0  0.6  79740  6664 pts/0    S+   06:18   0:00 php index.php
root       151  0.0  0.6  79740  6604 pts/0    S+   06:18   0:00 php index.php
root       152  0.0  0.6  79740  6604 pts/0    S+   06:18   0:00 php index.php
root       153  0.0  0.2   7640  2660 pts/1    R+   06:18   0:00 ps -aux

当子进程被使用 kill -9 进程id 强制杀死的时候如何处理?

pcntl_wifexited— 检查状态代码是否代表一个正常的退出

pcntl_wifsignaled — 检查子进程状态码是否代表由于某个信号而中断

pcntl_wtermsig — 返回导致子进程中断的信号

我们打开两个窗口 其中之一:

PHP如何开启pcntl模块并实现多进程编程呢?

PHP如何开启pcntl模块并实现多进程编程呢?

想了解更多相关内容请访问PHP中文网:PHP视频教程

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

6

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

28

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

12

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

5

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12万人学习

Java 教程
Java 教程

共578课时 | 46.5万人学习

HTML教程
HTML教程

共500课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号