6

PHPでproc_openを使用して複数のプロセスを一度に生成しようとしていますが、最初のプロセスが終了するまで2番目の呼び出しは開始されません。これが私が使用しているコードです:

for ($i = 0; $i < 2; $i++)
{
    $cmdline = "sleep 5";
    print $cmdline . "\n";
    $descriptors = array(0 => array('file', '/dev/null', 'r'), 
                         1 => array('file', '/dev/null', 'w'), 
                         2 => array('file', '/dev/null', 'w'));
    $proc = proc_open($cmdline, $descriptors, $pipes);
    print "opened\n";
}
4

5 に答える 5

6

他の人は代替案を指摘していますが、実際の問題はおそらく$proc変数のリークです。PHPはこれを追跡する必要があると思います。上書きする場合は、クリーンアップされます(つまり、proc_close、つまり待機することを意味します...)

$proc値をリークしないようにしてください。

<?php
$procs = array();
for ($i = 0; $i < 2; $i++)
{
  $cmdline = "sleep 5";
  print $cmdline . "\n";
  $descriptors = array(0 => array('file', '/dev/null', 'r'),
    1 => array('file', '/dev/null', 'w'),
    2 => array('file', '/dev/null', 'w'));
  $procs[]= proc_open($cmdline, $descriptors, $pipes);
  print "opened\n";
}
?>

:これにより、終了する前にプロセスハンドルがクリーンアップされるため、すべてのプロセスを最初に完了する必要があります。これらを使用するために必要なことをすべて実行した後で使用proc_closeする必要があります(つまり、パイプの読み取りなど)。あなたが本当に望んでいるのがそれらを起動してそれらを忘れることであるならば、それは別の解決策です。

于 2010-08-20T13:33:48.813 に答える
0

これを参照してください: http ://www.php.net/manual/en/book.pcntl.php

于 2010-08-20T13:23:28.310 に答える
0

これを試して:

$cmdline = "sleep 5 &";
于 2010-08-20T13:31:24.017 に答える
0

これは、スレッドの作成に関するすばらしい小さな記事です。クラスとその使用方法が含まれています。 http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html

それはあなたを正しい方向に向かわせるはずです。

于 2010-08-20T13:32:16.247 に答える
0

「proc_open」が機能するように設計されている方法だと思います(実際にはシステム)。&で切断するか、サブプログラムを実行して戻ってくるシェルスクリプトを実際に実行することによって切断するかを指定する必要があります。

于 2010-08-20T13:34:28.330 に答える