有个很奇怪的问,使用TCP Connection,在连接到来、收到消息的处理程序中,使用preg_match会导致子进程终止?

0
/**
* 当客户端与Workerman建立连接时(TCP三次握手完成后)触发的回调函数。
* 每个连接只会触发一次onConnect回调。
*
* @param \Workerman\Connection\TcpConnection $connection
*/
public function onClientConnected($connection)
{
$v = '99901807';
try
{
$a = preg_match('/^login:(\w{3,20})/i', $v);
var_dump($a);
}
catch (Throwable $e)
{
print_r($e);
}

}


PS:在不启动workerman的时候,上面跟 preg_match 有关的代码是没有报任何问题的。


下面是运行时输出信息截图:


workerman的日志:
2019-12-20 10:39:38 pid:5515 Workerman[server.php] restart
2019-12-20 10:39:38 pid:5515 Workerman[server.php] is stopping ...
2019-12-20 10:39:38 pid:5515 Workerman[server.php] stop success
2019-12-20 10:39:44 pid:5515 Workerman[server.php] stopping ...
2019-12-20 10:39:46 pid:5515 worker[TCP Server:5517] exit with status 9
2019-12-20 10:39:46 pid:5515 worker[ChannelServer:5516] exit with status 9
2019-12-20 10:39:46 pid:5515 Workerman[server.php] has been stopped
2019-12-20 10:39:50 pid:5520 Workerman[server.php] start in DEBUG mode
2019-12-20 10:40:03 pid:5520 worker[TCP Server:5522] exit with status 11


没有任何错误信息,正因为如此,才感觉莫名其妙


PS: 刚刚测试,在Linux服务器上运行没有问题,但以上问题是在Mac Book Pro的终端里运行的,基于Mac OS 10.14.6


Mac OS 的PHP版本:
PHP 7.3.4 (cli) (built: Apr 19 2019 00:20:56) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.7.0, Copyright (c) 2002-2019, by Derick Rethans
with Zend OPcache v7.3.4, Copyright (c) 1999-2018, by Zend Technologies


Linux 的 PHP 版本:
PHP 7.2.6 (cli) (built: Mar 12 2019 19:08:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

已邀请:

walkor

赞同来自: gutianlong

php 7.3的bug导致的。目前看php7.3 的jit功能还不稳定。
像这样把jit关闭就好了。


ini_set('pcre.jit', 0);

blogdaren - 常年游走于 Linux、PHP、C、VIM 之间【http://www.phpcreeper.com】

赞同来自:

1、具体报错信息是什么?你是依据什么判定preg_match导致进程终止的? 最好把这些信息都贴出来。
2、不管怎么样,导致进程终止有个普遍的原因就是: 程序抛出了尚未捕获的异常。

要回复问题请先登录注册