加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

为什么PHP挂起,当一个bash调用分叉

发布时间:2020-12-13 16:45:22 所属栏目:PHP教程 来源:网络整理
导读:我从php调用一些bash代码,但即使我将bash(带)分叉,php也不会在完全bash完成之前完成. 这段代码: htmlbodyHTML STARTbrpre?phpecho "PHP STARTn";echo `sleep 30 `;echo "PHP ENDn";?/preHTML ENDbr/body/html 在30秒之前,不会在浏览器中显示任何内容. 我
我从php调用一些bash代码,但即使我将bash(带&)分叉,php也不会在完全bash完成之前完成.

这段代码:

<html>
<body>
HTML START<br>
<pre>
<?php
echo "PHP STARTn";
echo `sleep 30 &`;
echo "PHP ENDn";
?>
</pre>
HTML END<br>
</body>
</html>

在30秒之前,不会在浏览器中显示任何内容.

我真正想要的是从php启动GUI应用程序,它应该继续运行.

解决方法

关闭睡眠调用中的所有文件描述符以允许它分离:

<?php
echo "PHP STARTn";
echo `sleep 30 <&- 1<&- 2<&- &`;
echo "PHP ENDn";
?>

否则,输出文件描述符仍然打开,并且PHP仍在尝试等待接收其输出,即使该进程不再直接附加.

这在运行时正常工作,立即退出但后面留下一个睡眠过程:

$time php5 test.php; ps auxw | grep sleep | grep -v grep
PHP START
PHP END

real    0m0.019s
user    0m0.008s
sys         0m0.004s
cduffy    6239  0.0  0.0  11240   576 pts/0    S    11:23   0:00 sleep 30

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读