Другие указывают на альтернативы, но ваша настоящая проблема, вероятно, утечка вашей переменной $ 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
после того, как вы закончите делать то, что вам нужно сделать с ними (то есть: читать каналы и т. Д.). Если вы действительно хотите запустить их и забыть о них, это другое решение.