执行后台外部程序

Execute background external program

如果我有这样的脚本:

<?php
system('notepad');
echo "END\n";

它打开记事本程序,但脚本停止,直到记事本结束。我 想在后台打开程序。我试过这个:

system('notepad &');

但是进程继续阻止脚本。我认为这是因为我的 shell 是 PowerShell,而不是 Bash 或类似的。这可能吗?

作为解决方法,您可以使用 proc_open:

<?php
$a_desc = [];
$a_pipe = [];
$r = proc_open('notepad', $a_desc, $a_pipe);
echo "END\n";
proc_close($r);

当你使用proc_open时,PHP只会等待进程终止,如果你 也叫proc_close。所以在上面的脚本中,END 会继续并且 打印,但此后脚本仍会挂起。如果你想彻底忘记 关于流程,可以省略proc_close:

<?php
$a_desc = [];
$a_pipe = [];
proc_open('notepad', $a_desc, $a_pipe);
echo "END\n";

通常你想调用 proc_close,就好像你的外部命令产生 输出,那么该输出可能会在任何内部 echo 之后打印 你有陈述。

https://php.net/function.proc-close