执行后台外部程序
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
之后打印
你有陈述。
如果我有这样的脚本:
<?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
之后打印
你有陈述。