我正在使用棘轮构建一个telnet / php程序。
我需要能够检查服务器循环是否正在运行,如果没有通过php exec命令启动它,那么将循环启动的信息发送给客户端。
我有以下几行:
$file = "php " . ABS_PATH . "inc/lib/telnet/telnet_server.php > /dev/null &";
exec($file);
print "done";
不幸的是,脚本似乎挂在了exec部分,所以我无法将信息发送给客户端。
我在EasyPHP环境中本地工作,所以我需要先在Windows下测试结果,然后在Linux网络服务器上测试。
任何帮助表示赞赏...
提前谢谢!答案 0 :(得分:0)
exec是一个阻塞命令,因为它等待输出 如果要启动进程/守护程序,应该查看popen或proc_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");