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

Windows环境下proc_open使用create_new_console选项失效问题

问题排查:Windows下proc_open带选项无法启动进程

系统环境

  • 操作系统:Windows 10
  • 终端:PowerShell
  • PHP版本:8.3.2

✅ 可正常运行的代码

以下代码能够成功启动PHP Web服务器:

$process = proc_open(
    "php -S localhost:8000 -t www/",
    array(
        array("pipe", "r"),
        array("pipe", "w"),
        array("pipe", "w"),
    ),
    $pipes,
    __PATH_PROJECT__
);

⛔ 无法运行的代码(无报错/警告)

希望使用Windows平台特有的create_new_console选项(让新进程拥有独立控制台,而非继承父进程控制台),但以下代码无法正常工作:

$process2 = proc_open(
    "php -S localhost:8000 -t www/",
    array(
        array("pipe", "r"),
        array("pipe", "w"),
        array("pipe", "w"),
    ),
    $pipes,
    __PATH_PROJECT__,
    array(
        "bypass_shell" => true,
        "create_new_console" => true
    )
);

调用proc_get_status得到的结果:

array(9) {
  ["command"]=>
  string(29) "php -S localhost:8000 -t www/"
  ["pid"]=>
  int(10944)
  ["cached"]=>
  bool(false)
  ["running"]=>
  bool(false)
  ["signaled"]=>
  bool(false)
  ["stopped"]=>
  bool(false)
  ["exitcode"]=>
  int(1)
  ["termsig"]=>
  int(0)
  ["stopsig"]=>
  int(0)
}

甚至传入空数组作为选项时,新进程也无法启动,恳请帮忙排查原因。

相关文档说明

proc_open函数用于执行命令并打开输入/输出的文件指针。在Windows平台下,可选参数$options支持以下关键选项:

  • create_new_console:为新进程创建独立的控制台窗口,不继承父进程控制台
  • bypass_shell:绕过系统shell直接执行命令,避免shell解析带来的问题

内容的提问来源于stack exchange,提问作者4uruanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:56