You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:35:11