热门标签 | 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





   



推荐阅读
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
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社区 版权所有