PHP CLI在Debian 32和Ubuntu 64上的流程标题截然不同

时间:2012-01-09 19:49:12

标签: ubuntu debian php ps

我有两台服务器 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:没有数字;流程标题为phppidof "php -q test.php"不起作用,我无法使用pidof php

Ubuntu有什么问题?

更新哇! pgrep -f "php -q test.php"效果很好,pidof "php -q test.php"没有。

更新2 我不确定这是否适用,但在Debian下我正在常规控制台工作,而Ubuntu正在通过SSH访问。

1 个答案:

答案 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