我有两台服务器 Debian Squeeze 32 和 Ubuntu 11.10 Server 64 。具有相同命令的相同脚本的行为非常不同。
脚本test.php:
<?php for ($i = 0; $i < 5; $i++) { echo $i, "\n"; sleep(1); }
命令:
php -q test.php &
ps | grep php
Debain:我看到正在打印的数字和流程标题php -q test.php
正如预期的那样。 pidof "php -q test.php"
工作正常。
Ubuntu:没有数字;流程标题为php
。 pidof "php -q test.php"
不起作用,我无法使用pidof php
。
Ubuntu有什么问题?
更新哇! pgrep -f "php -q test.php"
效果很好,pidof "php -q test.php"
没有。
更新2 我不确定这是否适用,但在Debian下我正在常规控制台工作,而Ubuntu正在通过SSH访问。
答案 0 :(得分:0)
输出缺失的问题是已知的并且由readline扩展引起。
来自PHP manual:
当启用readline时,php会切换终端模式以接受行缓冲输入。 这意味着在管道交互式命令时使用cli的正确方法是明确指定php没有使用终端进行输入:
php somescript.php < /dev/null | less
Debian和Ubuntu之间的区别在于,在Ubuntu的PHP包中,readline已启用,在Debians包中,它被禁用。
所以问题的解决方案 - 尽管你没有使用烟斗 - 是:
php -q test.php < /dev/null &
如果将stdin重定向到/dev/null
,则数字将按预期打印在终端上。
您还可以阅读此bugreport