PHP CLI 脚本如何检测是否在后台运行?

问题描述 投票:0回答:3

我正在开发一个 CLI PHP 脚本,可以在前台或后台执行。如果在前台运行,我希望能够与用户交互以获取输入信息。显然,如果使用“&”参数在后台启动脚本,则应跳过任何用户交互...

那么有没有办法让 PHP 脚本检测到它已经在后台启动了?

php background command-line-interface detection
3个回答
1
投票

无法检测其是否在后台运行。我还是没找到什么办法。

一种方法可能是遍历进程列表并检查

/usr/bin/php

的状态

最好的方法是使用参数(比如

--daemon
)。当传递此参数时,它将在后台运行,否则它将在前端打印有用的信息。

您可以使用 System_Daemon pear 包创建守护程序。


1
投票

有一个 Unix 常见问题(我通过这个 Stack Overflow 帖子发现)基本上声称它无法可靠地完成。该文章给出的一个建议是检查

stdin
是否是终端:

sh: if [ -t 0 ]; then ... fi
C: if(isatty(0)) { ... }

我同意 Pekka 的评论,您应该简单地向脚本提供一个参数。

-i
(用于交互)选项有时用于此明确目的。如果未传递该参数,您可以假设您处于“自动”模式。


0
投票

我就是这样做的:

if (!stream_isatty(STDIN)) {
    echo "Running in background\n";
}

如上所述,这与 C/C++ 中通常的做法基本相同。我记得 30 多年前,当我为 Unix 编写 C 程序时,我就这样做过。

© www.soinside.com 2019 - 2024. All rights reserved.