在调用exec()之后,如何强制PHP脚本继续使用脚本?

时间:2012-09-28 07:18:45

标签: php exec

我在PHP中使用exec函数来运行命令。我正在运行的命令通常需要相当长的时间,我不需要读取它的输出。是否有一种简单的方法告诉PHP在继续使用脚本的其余部分之前不要等待exec命令完成?

3 个答案:

答案 0 :(得分:2)

// nohup_test.php:

// a very long running process
$command = 'tail -f /dev/null';
exec("nohup $command >/dev/null 2>/dev/null &"); // here we go
printf('run command: %s'.PHP_EOL, $command);
echo 'Continuing to execute the rest of this script instructions'.PHP_EOL;

for ($x=1000000;$x-->0;) {
  for ($y=1000000;$y-->0;) {
    //this is so long, so I can do ps auwx | grep php while it's running and see whether $command run in separate process
  }
}

运行nohup_test.php:

$ php nohup_test.php
run command: tail -f /dev/null
Continuing to execute the rest of this script instructions

让我们找出我们流程的pids:

$ ps auwx | grep tail
nemoden   3397  0.0  0.0   3252   636 pts/8    S+   18:41   0:00 tail -f /dev/null
$ ps auwx | grep php
nemoden   3394 82.0  0.2  31208  6804 pts/8    R+   18:41   0:04 php nohup_test.php

如您所见,pid不同,我的脚本正在运行而不等待tail -f /dev/null

答案 1 :(得分:1)

这是我使用的(你可以使用exec或system而不是paasthru):

passthru("/path/to/program args >> /path/to/logfile 2>&1 &");

答案 2 :(得分:1)