我正在开发一个 CLI PHP 脚本,可以在前台或后台执行。如果在前台运行,我希望能够与用户交互以获取输入信息。显然,如果使用“&”参数在后台启动脚本,则应跳过任何用户交互...
那么有没有办法让 PHP 脚本检测到它已经在后台启动了?
无法检测其是否在后台运行。我还是没找到什么办法。
一种方法可能是遍历进程列表并检查
/usr/bin/php
的状态
最好的方法是使用参数(比如
--daemon
)。当传递此参数时,它将在后台运行,否则它将在前端打印有用的信息。
您可以使用 System_Daemon pear 包创建守护程序。
有一个 Unix 常见问题(我通过这个 Stack Overflow 帖子发现)基本上声称它无法可靠地完成。该文章给出的一个建议是检查
stdin
是否是终端:
sh: if [ -t 0 ]; then ... fi
C: if(isatty(0)) { ... }
我同意 Pekka 的评论,您应该简单地向脚本提供一个参数。
-i
(用于交互)选项有时用于此明确目的。如果未传递该参数,您可以假设您处于“自动”模式。
我就是这样做的:
if (!stream_isatty(STDIN)) {
echo "Running in background\n";
}
如上所述,这与 C/C++ 中通常的做法基本相同。我记得 30 多年前,当我为 Unix 编写 C 程序时,我就这样做过。