Windows下PHP执行批处理脚本无需等待结束的方案求助
问题:PHP调用批处理脚本无法后台运行持续进程
问题背景
我是PHP开发新手,项目中需要运行一个批处理脚本:该脚本会生成分析文件,核心是要编译并启动两个需持续运行的可执行文件。
我构建了包含环境变量设置、工作目录及启动参数的命令$cmd,执行exec($cmd)后,脚本确实生成了目标文件并启动了进程,但批处理会一直等待那两个可执行进程结束才执行临时文件清理,导致PHP程序持续停滞(而这两个进程不会自行结束)。
已尝试的解决方法
过去两天试了多种方案,均未解决问题:
- 执行
exec($cmd.' > NUL 2>&1 &'),效果和直接调用exec($cmd)完全一致,仍会卡住 - 执行
pclose(popen("start /B " . $cmd . " 1> ".$scrptDir." 2>&1 &", "r"));($scrptDir为指定工作目录),要么脚本完全不启动,要么因漏写分号导致AJAX请求出现语法错误
我的PHP核心代码如下:
public function runScript() { //-- compose the command line to start script $cmd = $this->getCall(); //-- execute the script exec($cmd); }
更新:后续尝试结果
之后又测试了以下写法,结果均相同:脚本正常运行,但启动的可执行文件会被立即关闭,随后脚本执行清理操作:
pclose(popen("start /B " . $cmd . " 1> NUL 2>&1 &", "r"));popen("start /B " . $cmd . " 1> NUL 2>&1 &", "r");exec('nohup ' . $cmd . ' 2>&1 &');
内容的提问来源于stack exchange,提问作者gravy
相关产品推荐
相关产品推荐

