在没有pcntl_fork()的情况下对PHP脚本进行后台监控

在没有pcntl_fork()的情况下对PHP脚本进行后台监控,php,daemon,Php,Daemon,我正在开发一个用PHP4.4.9编程的嵌入式系统,不幸的是没有PCNTL扩展 我需要创建一个作为守护进程在后台运行的脚本。您通常会使用fork(),或者在PHP中使用pcntl\u fork()——但此函数不可用。一个shell也丢失了,所以我不能使用标准工具 那么,还有什么其他方法可以在后台干净地启动流程呢?正如kingCrunch所说,您真的应该升级 首先,创建守护进程不仅仅是调用pcntl_fork()。您可能需要阅读和 接下来,您没有提到您打算如何解决并发性问题——虽然fork是解决这个

我正在开发一个用PHP4.4.9编程的嵌入式系统,不幸的是没有PCNTL扩展

我需要创建一个作为守护进程在后台运行的脚本。您通常会使用
fork()
,或者在PHP中使用
pcntl\u fork()
——但此函数不可用。一个shell也丢失了,所以我不能使用标准工具


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

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

首先,创建守护进程不仅仅是调用pcntl_fork()。您可能需要阅读和

接下来,您没有提到您打算如何解决并发性问题——虽然fork是解决这个问题的一种方法,但它并不是在守护进程中使用fork()的唯一原因

因此,有两个问题需要解决,首先是如何对程序进行后台监控,然后是如何处理并发性

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

解决并发问题的另一种方法是运行一个单线程服务器并使用socket_select(或stream_select)来多路传输连接-但我不确定PHP4中支持的程度-存在一个问题


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

PHP4现在很长一段时间都不受支持。你应该更新。你能把你的时间限制设为无限制吗?-@KingCrunch:在某些嵌入式系统上,你没有这种选择。@KingCrunch:不幸的是,没有。。我将不得不等待供应商这样做。哈克雷:在这种情况下,时间限制并不是一个真正的问题@Dragon-不,POSIX nohup不调用setsid()(尽管其他一些版本调用),感谢您的见解!但是,我知道如何编写守护进程,在给定的情况下,fork()和exec()就足够了。我试图用另一种方式来表述这个问题,而不是“如何编写守护程序”。对于可能对其他人有用的答案,仍然+1。