execphp需要很长时间
我正在通过php文件执行一个守护程序文件,如:execphp需要很长时间,php,ubuntu,websocket,exec,daemon,Php,Ubuntu,Websocket,Exec,Daemon,我正在通过php文件执行一个守护程序文件,如: echo exec("php -q /var/www/project/server.php"); 但这需要很长时间,而且还注意到它为相同的对象创建了两个过程: 5558 ? S 0:00 sh -c php -q /var/www/project/server.php 5559 ? S 0:00 php -q /var/www/project/server.php 所以请帮助我,为什么它会创建两
echo exec("php -q /var/www/project/server.php");
但这需要很长时间,而且还注意到它为相同的对象创建了两个过程:
5558 ? S 0:00 sh -c php -q /var/www/project/server.php
5559 ? S 0:00 php -q /var/www/project/server.php
所以请帮助我,为什么它会创建两个过程
以及如何加速执行?
我使用的是PHP5.5,ubuntu
已更新
我用棘轮换网套
下面是server.php的代码
<?php
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
$server = IoServer::factory(
new WsServer(
new DraftAuction()
)
, 8181
);
$server->run(); // If I comment this line getting response faster but I cant do that, this line keeps process in continues running mode.
大概是$server->run()代码>甚至应该返回?它似乎监听端口8181,等待客户端连接,它可能永远不会自己退出。大概是$server->run()代码>甚至应该返回?它似乎监听端口8181,等待客户端连接,它可能永远不会自己退出。大概是$server->run()代码>甚至应该返回?它似乎监听端口8181,等待客户端连接,它可能永远不会自己退出。大概是$server->run()代码>甚至应该返回?它似乎监听端口8181,等待客户端连接,它可能永远不会自己退出。进程5558是您的shell。它用于生成子进程5559,这是运行PHP脚本(WebSocket服务器)的实际进程。进程5558将继续等待,直到子进程完成其执行。(具体来说,它正在等待子进程从终端分离,或者通过正常终止(包括自己成为守护进程),或者通过成为后台进程并分离其输出。)
您的第一个PHP脚本包含exec()
语句,它正在等待它创建的进程在返回任何值之前完成执行。因为5558在5559返回之前不会返回,所以您的第一个PHP脚本也不会返回
你的选择是:
将server.php脚本转换为守护进程
在脚本开始之前从终端分离
在选项一中,fork,kill parent,关闭STDOUT和STDERR,再次fork,kill parent。不,我不想说得更详细,因为要做到公正,真的需要一本厚厚的参考书中有一整章关于Posix进程的内容
在选项2中,将exec()
语句更改如下:
exec("php -q /var/www/project/server.php >/dev/null 2>&1 &");
这会将输出重定向到/dev/null
(无处),并将进程置于后台状态。没有指向回声的点,因为它没有打印出来的内容
然后,您的shell将能够退出(无需等待),并且您的原始脚本可以成功完成,新的WebSocket服务器将运行headless
而且,我想很快指出:这真的不是一个WebSocket问题,也不是一个编程问题。这是一个Unix/Linux问题,问题的根源在超级用户上得到了更彻底的回答:进程5558是您的shell。它用于生成子进程5559,这是运行PHP脚本(WebSocket服务器)的实际进程。进程5558将继续等待,直到子进程完成其执行。(具体来说,它正在等待子进程从终端分离,或者通过正常终止(包括自己成为守护进程),或者通过成为后台进程并分离其输出。)
您的第一个PHP脚本包含exec()
语句,它正在等待它创建的进程在返回任何值之前完成执行。因为5558在5559返回之前不会返回,所以您的第一个PHP脚本也不会返回
你的选择是:
将server.php脚本转换为守护进程
在脚本开始之前从终端分离
在选项一中,fork,kill parent,关闭STDOUT和STDERR,再次fork,kill parent。不,我不想说得更详细,因为要做到公正,真的需要一本厚厚的参考书中有一整章关于Posix进程的内容
在选项2中,将exec()
语句更改如下:
exec("php -q /var/www/project/server.php >/dev/null 2>&1 &");
这会将输出重定向到/dev/null
(无处),并将进程置于后台状态。没有指向回声的点,因为它没有打印出来的内容
然后,您的shell将能够退出(无需等待),并且您的原始脚本可以成功完成,新的WebSocket服务器将运行headless
而且,我想很快指出:这真的不是一个WebSocket问题,也不是一个编程问题。这是一个Unix/Linux问题,问题的根源在超级用户上得到了更彻底的回答:进程5558是您的shell。它用于生成子进程5559,这是运行PHP脚本(WebSocket服务器)的实际进程。进程5558将继续等待,直到子进程完成其执行。(具体来说,它正在等待子进程从终端分离,或者通过正常终止(包括自己成为守护进程),或者通过成为后台进程并分离其输出。)
您的第一个PHP脚本包含exec()
语句,它正在等待它创建的进程在返回任何值之前完成执行。因为5558在5559返回之前不会返回,所以您的第一个PHP脚本也不会返回
你的选择是:
将server.php脚本转换为守护进程
在脚本开始之前从终端分离
在选项一中,fork,kill parent,关闭STDOUT和STDERR,再次fork,kill parent。不,我不想说得更详细,因为要做到公正,真的需要一本厚厚的参考书中有一整章关于Posix进程的内容
在选项2中,将exec()
语句更改为