0

我有两台服务器Debian Squeeze 32Ubuntu 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 访问。

4

1 回答 1

0

缺少输出的问题是已知的,并且是由 readline 扩展引起的。

PHP 手册

启用 readline 后,php 会切换终端模式以接受行缓冲输入。这意味着当您通过管道传递到交互式命令时,使用 cli 的正确方法是明确指定 php 不使用终端进行输入:

php somescript.php < /dev/null | less

Debian 和 Ubuntu 之间的区别在于,在 Ubuntu 的 PHP 包中启用了 readline,而在 Debians 包中禁用了它。

因此,尽管您没有使用管道,但您的问题的解决方案是:

php -q test.php < /dev/null &

如果您将标准输入重定向到/dev/null数字将按预期打印在终端上。

您还可以阅读此错误报告

于 2012-12-14T19:13:56.737 回答