PHP执行函数:重定向到dev/null以退出脚本(棘轮循环)


PHP exec function : redirect to dev/null to exit script ( Ratchet loop )

我正在使用ratchet构建一个telnet/php程序。

我需要能够检查服务器循环是否正在运行,如果没有通过php exec命令启动它,然后发送循环启动到客户端的信息。

我有以下几行:

$file = "php " . ABS_PATH . "inc/lib/telnet/telnet_server.php > /dev/null &";
exec($file);
print "done";

不幸的是,脚本似乎挂在执行部分,所以我不能发送信息给客户端。

我在本地工作在一个EasyPHP环境,所以我需要能够首先在Windows下测试结果,然后在Linux web服务器上。

感谢任何帮助…

我曾经遇到过这个问题,我写了一个简洁的小函数,可以在windows和linux上运行一个后台进程

function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r"));
    }
    else {
        exec($cmd . " > /dev/null &");
    }
}

用法很简单,在您的情况下,它将是execInBackground("php " . ABS_PATH . "inc/lib/telnet/telnet_server.php");

exec是阻塞命令,因为它等待输出。
如果您想启动一个进程/守护进程,您应该查看popen或proc_open。

由于您可能希望向进程发送数据,因此您将需要后者。

您可以使用proc_get_status来检索和存储PID(进程id),以便您可以稍后检查进程是否已经运行。

好的,这里的评论部分似乎有一个有效的答案:PHP Manual

希望这能帮助到一些人^^