执行另一个PHP文件而不等待它完成执行

时间:2010-09-19 11:11:18

标签: php

我有StartServer.php文件,如果它尚未启动,基本上会启动它。一切都很完美,除了StartServer.php将永远挂起等待shell_exec()'d文件Server.php完成它从未执行过的执行。

有没有办法执行PHP文件而忘记它 - 而不是等待它的执行完成?

编辑:它必须在Windows和Linux上运行。

3 个答案:

答案 0 :(得分:3)

这可以帮助您 - Asynchronous shell exec in PHP

基本上,你是shell_exec("php Server.php > /dev/null 2>/dev/null &")

答案 1 :(得分:0)

你需要像pcntl functions这样的东西。唯一的问题是这是一个非Windows扩展,不适合在Web服务器内运行。我能想到的唯一另一种可能性是使用exec函数并手动分叉当前进程(如dekomotes的回答所示),进行操作系统检测以找出所需的命令。请注意,这种方法与使用pcntl函数没有太大区别(至少在Linux中) - &符号使得第二个脚本在不同的进程中运行。 PHP中不支持多线程/多进程编程,尤​​其是在Web服务器内运行时。

答案 2 :(得分:0)

我认为传统的做法是让服务器从父进程中分离出来,即“daemonize”本身,而不是让启动服务器的脚本脱离自身。检查您正在开始查看它是否具有守护程序选项的服务器。

如果您自己编写了服务器,则需要在PHP中进行分离。它看起来像这样:

posix_setsid(); //Start a new session
if(pcntl_fork()) {exit();} //Fork process and kill the old one

我认为这也适用于Windows。 (未经测试。)