PHP exec函数:重定向到dev / null退出脚本(Ratchet循环)

时间:2015-08-18 15:42:03

标签: php exec ratchet

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

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

我有以下几行:

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

print "done";

不幸的是,脚本似乎挂在了exec部分,所以我无法将信息发送给客户端。

我在EasyPHP环境中本地工作,所以我需要先在Windows下测试结果,然后在Linux网络服务器上测试。

任何帮助表示赞赏...

提前谢谢!

3 个答案:

答案 0 :(得分:0)

exec是一个阻塞命令,因为它等待输出 如果要启动进程/守护程序,应该查看popenproc_open

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

您可以使用proc_get_status检索并存储PID(进程ID),以便稍后检查进程是否已在运行。

答案 1 :(得分:0)

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

希望这有助于某人^^

答案 2 :(得分:0)

我有一段时间没有这个问题,写了一个简洁的小功能,可以在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");