Pregunta

Estoy tratando de procesos múltiples de regeneración a la vez en PHP con proc_open, pero la segunda llamada no se iniciará hasta que el primer proceso ha terminado. Aquí está el código que estoy usando:

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";
}
¿Fue útil?

Solución

Otros están señalando alternativas, pero el problema real es probable que la filtración de la variable $ proc. Creo que PHP tiene que realizar un seguimiento de esto y si está sobreescribiendo ella, a limpiar para que (lo que significa proc_close, lo que significa esperar ...)

Trate de no filtrar el valor de $ 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";
}
?>

Nota: : Esto todavía va a limpiar sus manijas del proceso antes de salir, por lo que todos los procesos tendrán que completar primero. Debe utilizar proc_close después de haber terminado haciendo lo que tiene que ver con estos (por ejemplo: tubos de leer, etc.). Si lo que realmente quiere es poner en marcha ellos y olvidarse de ellos, que es una solución diferente.

Otros consejos

Aquí hay un pequeño gran artículo sobre la creación de hilos. Incluye una clase y cómo usarlo. http://www.alternateinterior.com/2007/ 05 / multi-threading-estrategias-en-php.html

Esto debe conseguir que va en la dirección correcta.

Creo que de manera "proc_open" está diseñado para el trabajo (en realidad el sistema). Es necesario especificar que desea desconectar y con o que realmente ejecuta un script que se ejecutará el subprograma y el regreso a ti.

Prueba esto:

$cmdline = "sleep 5 &";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top