Ver Mensaje Individual
  #6 (permalink)  
Antiguo 05/12/2013, 10:29
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: "pcntl_fork();" hijo no ejecuta desde navegador

Cita:
Iniciado por pezcaditox Ver Mensaje
A ver si me explico que no se si será correcto mi planteamiento...

Pretendo crear un proceso hijo (uno o los que sea) que ejecute un segundo script (haga la tarea q haga, más o menos pesada) en segundo plano.

Dejando al lado el tema de la llamada a otro script, mi pregunta es acerca del pcntl_fork();

Según tengo entendido despues de la llamada al pcntl_fork(); tendre dos procesos independientes que han replicado las variables y el codigo a ejecutar, y que únicamente se diferencian por su identificador.

A partir de la llamada juegas con el tema del identificador para ver que trozo de codigo ejecuta el padre y el hijo. ¿Es así o estoy equivocado? ¿de ser asi porq motivo no funciona mi codigo? ¿tiene q ver que este ejecutandose el script desde el navegador en lugar de una shell?

Os comento para posibles respuestas que tengo activados los modulos necesarios en apache (o al menos eso creo) por las pruebas que hice tras googlear un poco.

Un saludo.
Si no me equivoco, en PHP no hay segundos planos o procesos paralelos. Es todo lineal/secuencial (opera por 'tiempo de ejecución'). Tu código lo que hace es:

1º) recoge en la variable padre_pid un valor devuelto por la función getmypid().
2º) recoge en la variable hijo_pid un valor devuelto por la función pcntl_fork().
3º) comprueba con condicional if si el valor devuelto por la función getmypid() es igual al valor de la variable hijo_pid.
*si esto es cierto imprime un valor y traslada al usuario mediante cabecera HTTP a otro documento.
4º) comprueba si el valor devuelto por la función getmypid() es igual al valor de la variable padre_pid (dado por la función getmypid).
*si esto es cierto imprime un valor.
5º) imprime fin.

fin de la ejecución.

En PHP no hay procesos paralelos, puesto que pasan por un intérprete que comienza a leer el documento de arriba hacia abajo y va resolviendo cada instrucción finalizada con ';' o cada iteración de un bucle, etc.

No se si he sido claro. Espero que sí :)
__________________
Ayúdame a hacerlo por mi mismo.