我有StartServer.php文件,如果它尚未启动,基本上会启动它。一切都很完美,除了StartServer.php将永远挂起等待shell_exec()'d文件Server.php完成它从未执行过的执行。
有没有办法执行PHP文件而忘记它 - 而不是等待它的执行完成?
编辑:它必须在Windows和Linux上运行。
答案 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。 (未经测试。)