我正在使用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
希望这能帮助到一些人^^