php exec()的用法

php执行系统命令的方法有:

  1. system() 输出并返回最后一行shell结果
  2. exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面
  3. passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上 这些方法都是等待命令执行完后才继续执行后面的程序

不阻塞可以将命令输出的内容写入系统的一个回收站文件,这样程序就不会阻塞,即通过后台命令的方式执行

例如:

1
2
//cd 切换目录 ;后面是要执行的php方法
exec("cd web; php index.php task xxx > /dev/null 2>&1 &");

shell中可能经常能看到:

1
2
3
>/dev/null 2>&1
#可以
>/tmp/log.log 2>&1

/dev/null 代表空设备文件
1表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2表示stderr标准错误
&表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。