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


How can a PHP CLI script detect if running in the background?

我正在开发一个可以在前台或后台执行的CLI PHP脚本。如果在前台运行,我希望能够与获得输入信息的用户进行交互。显然,如果脚本是在后台使用"&amp参数应该跳过任何用户交互。。。

那么,有没有一种方法可以让PHP脚本检测到它已经在后台启动了呢?

无法检测其是否在后台运行。我仍然没有找到任何方法。

一种方法可以是遍历进程列表并检查/usr/bin/php 的状态

最好的方法是使用一个参数(比如--daemon)。当这个参数被传递时,它将在后台运行,否则它将在前端打印有用的信息。

您可以使用System_daemon pear包创建守护进程。

有一个Unix常见问题(我通过这篇Stack Overflow帖子找到了这个问题)基本上声称它不能可靠地完成。文章给出的一个建议是检查stdin是否是终端:

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

我同意Pekka的评论,即您应该简单地为脚本提供一个参数。-i(用于交互式)选项有时用于此明确目的。如果没有传递该参数,则可以假设您处于"自动"模式。