PHPで非同期のシェルスクリプト実行を実現する方法

PHPではexec()関数あるいはshell_exec()関数でシェルのスクリプトが実行できます。しかしながら、これらの関数は既定で同期的に実行されます。非同期で実行したい場合、以下の方法を利用できます。

  1. ネイティブに英語に言い換えてください。1つだけで結構です exec()
  2. ネイティブに日本語で言い換えると、
  3. 彼女は外国からの帰国子女です。
exec('sh script.sh > /dev/null 2>&1 &');
  1. proc_open()
  2. proc_open()
  3. proc_open()
$descriptorspec = array(
   0 => array("pipe", "r"),  // 标准输入
   1 => array("pipe", "w"),  // 标准输出
   2 => array("pipe", "w")   // 标准错误输出
);

$process = proc_open('sh script.sh', $descriptorspec, $pipes);

if (is_resource($process)) {
   // 非阻塞读取输出
   stream_set_blocking($pipes[1], 0);
   stream_set_blocking($pipes[2], 0);

   // 关闭标准输入
   fclose($pipes[0]);

   // 读取标准输出和标准错误输出
   $output = stream_get_contents($pipes[1]);
   $error = stream_get_contents($pipes[2]);

   // 关闭标准输出和标准错误输出
   fclose($pipes[1]);
   fclose($pipes[2]);

   // 关闭进程
   proc_close($process);
}

ニーズや環境によって、これらの方法はシェルスクリプトの非同期実行を可能にします。

bannerAds