我正在编写一个PHP脚本,它将在服务器上启动一个程序。
我这样做:
exec('myAppName');
这行代码“有效”,因为它实际执行程序,但是,我不能让它从这一行返回(继续过去)。
它会挂起,直到我手动关闭已打开的程序或超出max_execution_time。
我错过了一些明显的东西吗?
答案 0 :(得分:1)
manual for exec
,虽然在等待已启动的程序退出的问题上并不完全清楚,但声明返回值为
返回值:命令结果的最后一行。
换句话说,正如您所观察到的那样,为了返回最后一行输出,exec
将不会返回,直到启动的程序退出。
答案 1 :(得分:0)
你需要对它进行背景,以便继续使用我认为的其他PHP。
在Unix / Linux中,使用“&”字符。 ..
嗯,或者是那个那样做的系统......该死的,现在不记得了 - 会再次阅读本手册。答案 2 :(得分:0)
要在PHP中处理流程,您需要执行以下操作:
function spawnBackgroundProcess($sProcessLine)
{
$aPipes = array();
$rProcess = proc_open($sProcessLine, array(), $aPipes);
proc_close($rProcess);
}
真的是在滥用proc_ *系列,但这是最好的方式。
(别忘了&!)
答案 3 :(得分:0)
如果您想在后台执行命令而不让脚本等待结果,您可以执行以下操作:
<?php
passthru("/usr/bin/php /path/to/script.php ".$argv_parameter." >> /path/to/log_file.log 2>&1 &");
?>
这里有一些重要的事情。
首先:把完整路径放到php二进制文件中,因为这个命令将在apache用户下运行,你可能没有像该用户那样设置php命令别名。
第二:注意命令字符串末尾的两件事:'2&gt;&amp; 1'和'&amp;'。 '2&gt;&amp; 1'用于将错误重定向到标准IO。而最重要的是'&amp;'在命令字符串的末尾,告诉终端不要等待响应。
第三:确保您对'log_file.log'文件
拥有777权限享受!