Debian 32 与 Ubuntu 64 上的 PHP CLI 进程标题截然不同

发布于 2024-12-26 07:34:04 字数 760 浏览 0 评论 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:没有数字;进程标题是phppidof "php -q test.php" 不起作用,我无法使用 pidof php

Ubuntu 有什么问题吗?

更新哇! pgrep -f "php -q test.php" 效果很好,而 pidof "php -q test.php" 则不然。

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

I have two servers Debian Squeeze 32 and Ubuntu 11.10 Server 64. The same script with the same command behaves very different.

Script test.php:

<?php for ($i = 0; $i < 5; $i++) { echo $i, "\n"; sleep(1); }

Command:

php -q test.php &
ps | grep php

Debain: I see numbers being printed and process title is php -q test.php as expected. pidof "php -q test.php" works fine.

Ubuntu: No numbers; process title is php. pidof "php -q test.php" does not work and I can't use pidof php.

What's wrong with Ubuntu?

Update WOW! pgrep -f "php -q test.php" works well while pidof "php -q test.php" doesn't.

Update 2 I'm not sure if this may apply, but under Debian I'm working in a regular console, while Ubuntu is being accessed by SSH.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七秒鱼° 2025-01-02 07:34:04

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

来自 PHP 手册

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

php somescript.php < /dev/null | less

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

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

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

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

您还可以阅读此错误报告

The problem with missing output is known and caused by the readline extension.

From the PHP manual :

When readline is enabled, php switches the terminal mode to accept line-buffered input.
This means that the proper way to use the cli when you pipe to an interactive command is to explicitly specify that php is not using the terminal for input:

php somescript.php < /dev/null | less

The difference between Debian and Ubuntu is that in Ubuntu's PHP package readline is enabled and in Debians package it is disabled.

So the solution to your problem - although your are not using a pipe - is:

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

If you redirect stdin to /dev/null the numbers will be printed on terminal as expected.

You may also read this bugreport

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文