pcntl_rfork

(PHP 8 >= 8.1.0)

pcntl_rforkManipula los recursos de un proceso

Descripción

function pcntl_rfork(int $flags, int $signal = 0): int

Manipula los recursos de un proceso.

Parámetros

flags

El parámetro flags determina qué recursos del proceso invocante (el padre) son compartidos por el nuevo proceso (el hijo) o inicializados a sus valores por defecto.

flags es el OR lógico de algún subconjunto de:

  • RFPROC: Si está establecido, se crea un nuevo proceso; en caso contrario, los cambios afectan al proceso actual.
  • RFNOWAIT: Si está establecido, el proceso hijo será disociado del padre. Al terminar, el hijo no dejará un estado que el padre pueda recoger.
  • RFFDG: Si está establecido, la tabla de descriptores de archivo del invocante es copiada; en caso contrario, los dos procesos comparten una única tabla.
  • RFCFDG: Si está establecido, el nuevo proceso comienza con una tabla de descriptores de archivo limpia. Es mutuamente excluyente con RFFDG.
  • RFLINUXTHPN: Si está establecido, el kernel devolverá SIGUSR1 en lugar de SIGCHLD cuando el hilo del hijo termine. Está destinado a realizar la notificación al padre de la terminación de un clone de Linux.
  • RFTSIGZMB: Si está establecido, el kernel entregará al padre la señal especificada por el parámetro signal cuando el hijo termine, en lugar de la señal SIGCHLD por defecto. Especificar el número de señal 0 desactiva la entrega de la señal cuando el hijo termina.
  • RFTHREAD: Si está establecido, el nuevo proceso comparte con su padre la tabla que asocia los descriptores de archivo a los líderes de proceso. Solo se aplica cuando ni RFFDG ni RFCFDG están establecidos.
signal

El número de la señal a entregar al padre cuando el hijo termina. Solo se utiliza cuando el flag RFTSIGZMB está establecido. Especificar 0 desactiva la entrega de la señal cuando el hijo termina.

Valores devueltos

En caso de éxito, el PID del proceso hijo es devuelto en el hilo de ejecución del padre, y se devuelve un 0 en el hilo de ejecución del hijo. En caso de fallo, se devolverá un -1 en el contexto del padre, no se creará ningún proceso hijo, y se generará un error de PHP.

Ejemplos

Ejemplo #1 Ejemplo con pcntl_rfork()

<?php

$pid = pcntl_rfork(RFNOWAIT|RFTSIGZMB, SIGUSR1);
if ($pid > 0) {
  // Este es el proceso padre.
  var_dump($pid);
} else {
  // Este es el proceso hijo.
  var_dump($pid);
  sleep(2); // como el hijo no espera, se ve su "pid"
}
?>

Resultado del ejemplo anterior es similar a:

int(77093)
int(0)

Notas

Nota:

Esta función solo está disponible en los sistemas BSD.

Véase también

add a note

User Contributed Notes

There are no user contributed notes for this page.