我有一个简短的PHP实用程序脚本,我只是用cli从cli运行它:
PHP myscript.PHP
脚本始终在运行,定期执行某些任务(与问题无关).它不需要用户的任何输入.
运行之后,我通常按CTRL z,然后运行bg将进程置于后台,一切都很好.
如果我运行它:
PHP myscript.PHP &
脚本在启动时放在后台,但它也处于停止状态.例:
[1] 11513
[1]+ Stopped PHP myscript.PHP
即使在这一点上运行bg也无济于事,我必须运行fg,然后再按CTRL z和bg使其工作.
这是PHP脚本:
<?
while(true){
echo 'hi '.time()."\n";
sleep(30);
}
?>
我的问题是我不能直接在后台运行它,因为系统会停止它,我不明白为什么.我怎样才能解决这个问题?
更新:
我制作了相同脚本的bash版本,它可以运行并放入后台(运行而不是停止),只需使用&最后(script.sh&)
script.sh:
#!/bin/bash
while true; do
echo `date`
sleep 30
done
为什么PHP脚本在后台启动后停止,而bash脚本没有?
什么可能导致这种不同的行为?
解决方法:
通常情况下,您使用&发送到后台的过程是什么?并且脚本等待来自终端的输入,进入停止状态.
例如.有一个bash脚本valecho:
#!/bin/sh
read val
echo $val
运行它:
./valecho &
脚本将停止.
当它运行时
echo hello | ./valecho &
将正确运行和完成.
所以,检查你的PHP – 可能需要stdin的一些输入
编辑 – 基于评论:
我不是一个PHP开发人员 – 但只是尝试了下一个脚本(p.PHP)
<?PHP
while(true){
echo 'hi '.time()."\n";
sleep(3);
}
?>
使用命令:
PHP -f p.PHP &
并且运行得很好……所以…为混乱而烦恼……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。