因此,在PHP在Windows上:是否有可能都在后台运行的可执行文件和检索它的PID?我已经推断出可以单独完成这两项任务,但不能同时完成.
要对通过SHELL启动的进程进行后台处理,'start /B "bg" myprog.exe'必须使用该命令,并且必须立即关闭SHELL进程.
要做到这一点,许多人都这样使用pclose( popen( ... ) ),pclose( popen( 'start /B "bg" myprog.exe', 'r') );但据我所知,pid使用popen时无法检索.
因为pid使用popen 是不可能的,所以我们必须看看proc_open.
使用proc_open我们可以检索exe的pid当且仅当if bypass_shell设置为true.
如果bypass_shell设置为false(默认值),Windows将返回pidSHELL的内容.有关详细信息,请参阅:https://bugs.php.net/bug.php?id = 41052
该start /B传递给proc_open时,当命令失败bypass_shell = true,因为它跳过了SHELL和发送命令行参数直接MYPROG.EXE不知道他们做什么.
相反,如果bypass_shell = false(默认)和proc_close用于立即关闭SHELL,myprog.exe在后台运行就像使用pclose( popen( ... ) )BUT 时返回错误 pid(我们得到pid了SHELL).
那么,背景+正确的pid检索是否可行? …
这是我尝试过的.希望有人有时间看看这个并提出一些建议.谢谢!
编辑:我相信我已经回答了我自己的问题:https://stackoverflow.com/a/12760672/906794
克隆我的回购
$ git clone leoj3n/roots
Cloning into 'roots'...
remote: Counting objects: 3177, done.
remote: Compressing objects: 100% (1362/1362), done.
remote: Total 3177 (delta 2117), reused 2761 (delta 1792)
Receiving objects: 100% (3177/3177), 1.40 MiB | 609 KiB/s, done.
Resolving deltas: 100% (2117/2117), done.
Checking out files: 100% (146/146), done.
Run Code Online (Sandbox Code Playgroud)更改目录
$ cd roots
Run Code Online (Sandbox Code Playgroud)检查状态
roots(parent) $ git status
# On branch parent
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)添加上游
roots(parent) $ git remote add upstream …Run Code Online (Sandbox Code Playgroud)