Привет, я в последнее время много использую proc_open, и он никогда не ждет, пока он закончит, прежде чем двигаться дальше. Убедитесь, что вы указали каналы, а не просто используете пустой массив ()
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
, а также присваивать proc_open переменной.
$myProc = proc_open("/var/www/other_scripts/perl/apps/emails_extract_from_url.pl \"$stoopid\"", $descriptorspec , $foo)
Затем вы можете получить статус вашего процесса, используя proc_get_status($myProc);
Больше информации здесь http://au.php.net/proc_open
Дополнительная информация о закрытии.
$temp = fgets($this->open_pipes[$thread_id][1], 1024);
if($this->checkFinishedThread($thread_id))
{
fclose($this->open_pipes[$thread_id][1]);
proc_close($thread);
}
function checkFinishedThread($thread_id)
{
$test = stream_get_meta_data($this->open_pipes[$thread_id][1]);
if($test['eof'] == 1)
return true;
return false;
}