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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了为什么PHP挂起,当一个bash调用分叉脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我从PHP调用一些bash代码,但即使我将bash(带&)分叉,PHP也不会在完全bash完成之前完成.

这段代码

<htML>
<body>
HTML START<br>
<PRe>
<?PHP
echo "PHP START\n";
echo `sleep 30 &`;
echo "PHP END\n";
?>
</pre>
HTML END<br>
</body>
</html>

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

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

解决方法

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

<?PHP
echo "PHP START\n";
echo `sleep 30 <&- 1<&- 2<&- &`;
echo "PHP END\n";
?>

否则,输出文件描述符仍然打开,并且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

脚本宝典总结

以上是脚本宝典为你收集整理的为什么PHP挂起,当一个bash调用分叉全部内容,希望文章能够帮你解决为什么PHP挂起,当一个bash调用分叉所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。