热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在使用swoole_process时在子进程使用复杂的正则子进程会crash掉,主进程没事。

在使用swoole_process时在子进程使用复杂的正则子进程会crash掉,主进程没事。相关代码

在使用swoole_process时在子进程使用复杂的正则子进程会crash掉,主进程没事。


相关代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

class TestProcess{

    public $mpid=0;

    public $max_precess=8;

    public $task  = array();

    public $works = [];

    public $swoole_table = NULL;

    public $process_objs = [];

   

    function handle($index, $worker){

        while (true){

            $msg = "test_preg_replace_slave";

            $msg = preg_replace('/[ \r\n\t]*\n[ \r\n\t]*/', '', $msg);//使用会crash

            //$msg = preg_replace('/[ \r\n\t]*\n/', '', $msg);//正常

            var_dump($msg);

        }

    }



    public function __construct(){

        try {

            $this->swoole_table = new swoole_table(1024);

            $this->swoole_table->column('index', swoole_table::TYPE_INT);

            $this->swoole_table->create();

            $this->mpid = posix_getpid();

        }catch (\Exception $e){

            Logger::error($e);

        }

    }



    public function run(){

        try{

            for ($i=0; $i <$this->max_precess; $i++) {

                $this->createProcess();

            }

            $this->runProcess();

            $this->processWait();

        }  catch (Exception $e){

            Logger::error($e);

            exit();

        }

    }



    private function runProcess(){

        foreach($this->process_objs as $index => $process){

            $this->works[$index]=$process->start();

        }

    }



    public function createProcess($index=null){

        $msg = "test_preg_replace_master";

        $msg = preg_replace('/[ \r\n\t]*\n[ \r\n\t]*/', '', $msg);

        var_dump($msg);

        if(is_null($index)){

            $index=$this->swoole_table->get('index');

            if($index === false){

                $index = 0;

            }else{

                $index = $index['index']+1;

            }

        }

        $this->swoole_table->set('index',array('index'=>$index));

        $process = new swoole_process(function(swoole_process $worker)use($index){

            call_user_func_array(array($this, 'handle'),array($index, $worker));

        }, false, false);

        $this->process_objs[$index] = $process;

    }



    public function processWait(){

        $ret = array();

        while($ret = swoole_process::wait()) {

            $pid = $ret['pid'];

        }

    }

   

}

try{

    $obj = new TestProcess();

    $obj->run();

} catch (Exception $e) {

    Logger::error($e->getMessage());

}

swoole 版本 4.3.0-alpha
php 版本 7.3.0
开启coredump时候,发现文件巨大,每个子进程文件达1.4G





   



推荐阅读
  • 主板市盈率、市净率及股息率的自动化抓取
    本文介绍了如何通过Python脚本自动从中国指数有限公司网站抓取主板的市盈率、市净率和股息率等关键财务指标,并将这些数据存储到CSV文件中。涉及的技术包括网页解析、正则表达式以及异常处理。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 本文介绍如何创建一个专门用于处理浮点数的JSON处理器,并将其注册到JSON配置器中,以实现对浮点数的精确控制和格式化输出。 ... [详细]
  • 本文由「Vue虚拟实验室」的成员effort撰写,深入探讨了Vue CLI 3.0创建项目后的配置细节,特别是如何通过配置代理解决开发环境中的跨域问题。 ... [详细]
  • Python库在GIS与三维可视化中的应用
    Python库极大地扩展了GIS的能力,使其能够执行复杂的数据科学任务。本文探讨了几个关键的Python库,这些库不仅增强了GIS的核心功能,还推动了地理信息系统向更高层次的应用发展。 ... [详细]
  • 本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • Python数据类型6 字典
    字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包 ... [详细]
  • Python编码入门指南
    本文探讨了使用Python进行网络设备连通性测试的简便性,特别是针对IP地址范围为192.168.0.101至192.168.0.200的设备。通过比较Python与Shell、Java等语言,展示了Python在执行此类任务时的优势。 ... [详细]
  • 本文精选了几所优秀的PHP实训和培训学校,为希望深入学习PHP编程的学员提供参考。 ... [详细]
  • Windows环境下部署Kubernetes Dashboard指南
    本指南详细介绍了如何在Windows系统中部署Kubernetes Dashboard,包括下载最新配置文件、修改服务类型以支持NodePort访问、下载所需镜像并启动Dashboard服务等步骤。 ... [详细]
author-avatar
phpxiaoxuesheng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有