它实际上是php和bash的组合:
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
Run Code Online (Sandbox Code Playgroud)
我不明白2>&1 & echo $!它的用途是什么?
2>&1 将stderr重定向到stdout,并$! "扩展到最近执行的后台(异步)命令的进程ID".
那么,这是发生了什么:
$cmd到名为的文件$outputfile.如果没有2>&1,您将无法读取文件中的stderr输出.&表示进程在后台运行.$cmd(通过$!)获得的PID附加到结尾$pidfile.