Название процесса PHP CLI в Debian 32 и Ubuntu 64 сильно отличается

У меня есть два сервера 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

Дебен: Я вижу, что числа печатаются, а название процесса php -q test.php, как и ожидалось. pidof "php -q test.php" работает нормально.

Ubuntu: нет номеров; название процесса php. pidof "php -q test.php" не работает, и я не могу использовать pidof php.

Что не так с Убунтой?

Обновить ВАУ! pgrep -f "php -q test.php" работает хорошо, а pidof "php -q test.php" нет.

Обновление 2 Я не уверен, применимо ли это, но в Debian я работаю в обычной консоли, а доступ к Ubuntu осуществляется по SSH.


person Pavel Koryagin    schedule 09.01.2012    source источник
comment
возможно, стоит попытаться передать полную командную строку в php   -  person    schedule 09.01.2012
comment
@Dagon /usr/bin/php -q test.php &, затем ps | grep php выдает абсолютно то же самое. php — это заголовок, а pidof ведет себя так же.   -  person Pavel Koryagin    schedule 10.01.2012
comment
У меня работает на той же версии Ubuntu, 64-битной.   -  person Narf    schedule 10.01.2012
comment
Я смог воспроизвести проблему. Я использую Ubuntu 12.04 AMD64 и Debian Squeeze 32 (VirtualBox).   -  person hek2mgl    schedule 14.12.2012
comment
Я также пытался подключиться по ssh с машины Squeeze к машине Ubuntu. Проблема все еще существует. Так что я предполагаю, что это не терминальная проблема   -  person hek2mgl    schedule 14.12.2012
comment
Что означает «заголовок процесса»?   -  person hek2mgl    schedule 14.12.2012


Ответы (1)


Проблема с отсутствующим выводом известна и вызвана расширением readline.

Из руководства по PHP:

Когда readline включен, php переключает режим терминала, чтобы принимать ввод с линейной буферизацией. Это означает, что правильный способ использования cli при передаче интерактивной команды заключается в том, чтобы явно указать, что php не использует терминал для ввода:

php somescript.php < /dev/null | less

Разница между Debian и Ubuntu заключается в том, что в пакете PHP для Ubuntu включена строка чтения, а в пакете Debian она отключена.

Итак, решение вашей проблемы - хотя вы не используете трубу - это:

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

Если вы перенаправите стандартный ввод на /dev/null, числа будут напечатаны на терминале, как и ожидалось.

Вы также можете прочитать этот отчет об ошибке.

person hek2mgl    schedule 14.12.2012