【问题标题】:PHP CLI very different process title on Debian 32 vs Ubuntu 64Debian 32 与 Ubuntu 64 上的 PHP CLI 进程标题非常不同
【发布时间】:2012-01-09 19:49:11
【问题描述】:

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

Ubuntu 出了什么问题?

更新哇! pgrep -f "php -q test.php" 运行良好,而 pidof "php -q test.php" 则不行。

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

【问题讨论】:

  • 可能值得尝试将完整的命令行提供给 php
  • @Dagon /usr/bin/php -q test.php &amp; 然后ps | grep php 产生完全相同的结果。 php 是标题,pidof 的行为相同。
  • 在同一个 64 位 Ubuntu 版本上为我工作。
  • 我可以重现该问题。我正在使用 Ubuntu 12.04 AMD64 和 Debian Squeeze 32 (VirtualBox)。
  • 我还尝试通过 ssh 从 Squeeze 机器连接到 Ubuntu 机器。问题依然存在。所以我认为这不是终端问题

标签: ubuntu debian php ps


【解决方案1】:

缺少输出的问题是已知的,由 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 &

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

您也可以阅读此bugreport

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多