在没有pcntl_fork()的情况下守护PHP脚本

时间:2011-07-29 08:42:20

标签: php daemon

我正在使用PHP 4.4.9编程的嵌入式系统 - 遗憾的是没有PCNTL扩展。

我需要创建一个在后台作为守护进程运行的脚本。您通常使用fork()或PHP案例pcntl_fork()执行此操作 - 但此功能不可用。 shell也缺失了,所以我不能使用标准工具。

那么,还有什么方法可以在后台干净地启动流程?

1 个答案:

答案 0 :(得分:1)

正如kingCrunch所说,你真的应该升级。

首先,制作守护进程不仅仅是调用pcntl_fork()。您可能需要阅读Unix programming FAQUnix socket FAQ

接下来,你没有提到你打算如何解决并发问题 - 虽然forking是一个解决方案,但它不是在守护进程中使用fork()的唯一原因。

所以你真的有两个问题要解决,首先你如何守护程序然后如何处理并发。

请注意,后者的一种方法是避免使用前者,即从[x] inetd运行服务器。

解决并发问题的另一种方法是运行单线程服务器并使用socket_select(或stream_select)来复用连接 - 但我不确定PHP 4中支持的程度如何 - 有{{3 }}

一个简单的解决方案是使用good example here在C中编写一个简单的包装器程序来引导程序。或者您可以直接从inittab启动它。或者对于具有复杂管理设施的解决方案,请查看DJB的daemon()