【发布时间】:2016-01-13 23:11:59
【问题描述】:
我正在尝试从 Linux 下的 php5 脚本创建一个 tarball,但我并不关心输出;到目前为止我立即找到的方法就是简单地
system("tar czf tarball.tgz directory/path &");
但是我想后台处理这个过程
检查 system() documentation 它提到必须将输出重定向到文件
然而
system("tar czf tarball.tgz directory/path > /dev/null 2>&1");
没有帮助。 system() 函数不接受文件描述符......我错过了什么?
用这些测试:
脚本test.php
<pre><?php
exec("bash dodate 2>&1 /dev/null &");
system("echo done at \$(date)");
?></pre>
脚本./dodate
sleep 5
date
我转到我的浏览器并调用/刷新页面;确实需要 5 秒,然后打印/更新“完成”消息。
谢谢
【问题讨论】:
-
第一个 sn-p 结束时的
&应该让它在后台运行 - 不是吗?您需要将输出/结果报告给您的 PHP 程序,还是可以在不知情的情况下继续执行? -
如果您不关心输出,
exec()可能是您更好的选择:php.net/manual/en/function.exec.php -
唉,& 符号没有后台处理...具体来说,我通过创建一个包含
sleep 5 ; date内容的脚本“dodate”然后调用system("bash dodate &")来测试它,但它会等待然后打印输出……!与 exec 效果相同