2

execPHPの関数を使用してコマンドを実行しています。私が実行しているコマンドにはかなりの時間がかかることが多く、その出力を読む必要はありません。execスクリプトの残りの部分に進む前に、コマンドが終了するのを待たないように PHP に指示する簡単な方法はありますか?

4

3 に答える 3

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

プロセスの pid を調べてみましょう。

$ 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ます。

于 2012-09-28T07:44:53.417 に答える
1

これが私が使用するものです(paasthruの代わりにexecまたはsystemを使用できます):

passthru("/path/to/program args >> /path/to/logfile 2>&1 &");
于 2012-09-28T07:33:45.623 に答える
1

あなたが探しているのは、ここで答えたように、非同期呼び出しと呼ばれます:

PHP での非同期シェル exec

php バックグラウンドプロセスを実行する

バックグラウンド プロセスとしての PHP exec() (Windows Wampserver 環境)

于 2012-09-28T07:35:58.023 に答える