(PHP 8 >= 8.1.0)
pcntl_rfork — Manipula los recursos del proceso
flags
El parámetro flags determina qué recursos del proceso llamante (padre)
son compartidos por el nuevo proceso (hijo) o inicializados a sus valores por omisión.
flags es el OU lógico de un subconjunto de los siguientes valores:
RFPROC: Si está definido, se crea un nuevo proceso;
de lo contrario, los cambios afectan al proceso actual.
RFNOWAIT: Si está definido, el proceso hijo será disociado del padre.
Al salir, el proceso hijo no dejará un estado a recolectar para el padre.
RFFDG: Si está definido, la tabla de descriptores de ficheros del llamante es copiada;
de lo contrario, ambos procesos comparten una sola tabla.
RFCFDG: Si está definido, el nuevo proceso comienza con una tabla de descriptores de ficheros propia.
Es mutuamente excluyente con RFFDG.
RFLINUXTHPN: Si está definido, el núcleo devolverá SIGUSR1 en lugar de SIGCHILD al salir del hilo para el hijo.
Esto está destinado a hacer la notificación de salida del padre de salida del hilo Linux clone.
RFTSIGZMB: Si está definido, el núcleo enviará la señal especificada
por el parámetro signal al padre al salir el hijo,
en lugar del SIGCHLD por omisión. Especificar el número de señal 0 desactiva
la entrega de señal al salir el hijo.
RFTHREAD: Si está definido, el nuevo proceso comparte el descriptor de fichero
a la tabla de líderes de proceso con su padre. Solo se aplica cuando ni
RFFDG ni RFCFDG están definidos.
signal
El número de señal a enviar al padre cuando el hijo sale.
Solo se usa cuando el indicador RFTSIGZMB está definido.
Especificar 0 desactiva la entrega de señal al salir el hijo.
En caso de éxito, el PID del proceso hijo es devuelto en el contexto del padre,
y un 0 es devuelto en el contexto del proceso hijo.
En caso de fallo, un -1 será devuelto en el contexto del padre,
ningún proceso hijo será creado, y se lanzará un error PHP.
Ejemplo #1 Ejemplo de pcntl_rfork()
<?php
$pid = pcntl_rfork(RFNOWAIT|RFTSIGZMB, SIGUSR1);
if ($pid > 0) {
// Esto es el proceso padre.
var_dump($pid);
} else {
// Esto es el proceso hijo.
var_dump($pid);
sleep(2); // mientras el hijo no duerma, vemos su "pid"
}
?>Resultado del ejemplo anterior es similar a:
int(77093) int(0)
Nota:
Esta función solo está disponible en sistemas BSD.