它实际上是php和bash的组合:
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
我不明白2>&1 & echo $!
的用途是什么?
答案 0 :(得分:7)
2>&1
redirects stderr to stdout和$!
"Expands to the process ID of the most recently executed background (asynchronous) command".
所以,这就是发生的事情:
$cmd
的stderr和stdout发送到名为$outputfile
的文件。如果您没有2>&1
,则无法读取文件中的stderr输出。&
表示处理runs in the background。$cmd
的PID(通过$!
获得)附加到$pidfile
的末尾。