execphp需要很长时间

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 所以请帮助我,为什么它会创建两

我正在通过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()
    语句更改为