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
相关产品推荐
相关产品推荐

