(PHP 8 >= 8.4.0)
pcntl_waitid — Espera a que un proceso hijo cambie de estado
$idtype
= P_ALL
,$id
= null
,&$info
= [],$flags
= WEXITED
,&$resource_usage
= []Obtiene información de estado relacionada con eventos de terminación, parada y/o continuación en uno de los procesos hijos del llamador.
A menos que se pase el flag WNOHANG
, el proceso que llama
quedará bloqueado hasta que ocurra un error, o hasta que la información de
estado sea disponible y cumpla con todas las siguientes condiciones:
idtype
y id
.
flags
.
Si la información de estado coincidente está disponible antes de la llamada a pcntl_waitid(), el retorno será inmediato. Si la información de estado coincidente está disponible para dos o más procesos hijos, el orden en que se informa su estado no está especificado.
Nota:
Esta documentación cubre la especificación POSIX de la función
waitid
, junto con algunos parámetros adicionales específicos de las implementaciones en Linux, NetBSD y FreeBSD. Consulte la página del manualwaitid(2)
de su sistema para obtener detalles específicos sobre cómo funcionawaitid
en su sistema.
idtype
id
idtype
y id
se utilizan para especificar qué hijos esperar.
Si idtype es P_ALL |
esperar cualquier proceso hijo, id se ignora.
|
Si idtype es P_PID |
esperar al hijo con ID de proceso igual a id .
|
Si idtype es P_PGID |
esperar cualquier hijo con ID de grupo de procesos igual a id .
|
Si idtype es P_PIDFD (desde Linux 5.4) |
esperar al hijo referenciado por el descriptor de archivo PID especificado en
id .
(Consulte la página del manual de Linux pidfd_open(2) para obtener
más información sobre los descriptores de archivo PID.)
|
Si idtype es P_UID
|
esperar procesos cuyo ID de usuario efectivo es igual a
id .
|
Si idtype es P_GID
|
esperar procesos cuyo ID de grupo efectivo es igual a
id .
|
Si idtype es P_SID
|
esperar procesos cuya ID de sesión es igual a
id .
Si el proceso hijo inició su propia sesión, su ID de sesión será
igual a su ID de proceso. De lo contrario, la ID de sesión de un
proceso hijo coincidirá con la ID de sesión del llamador.
|
Si idtype es P_JAILID
|
esperar procesos dentro de una cárcel cuya identificador de cárcel es igual a
id .
|
info
El parámetro info
se establece en un array
que contiene información sobre la señal.
El array info
puede contener las siguientes claves:
signo
: Número de señalerrno
: Número de error del sistemacode
: Código de señalstatus
: Valor de salida o señalpid
: ID del proceso emisoruid
: ID de usuario real del proceso emisorutime
: Tiempo de usuario consumidostime
: Tiempo de sistema consumidoflags
El valor de flags
es el valor de cero o más de
las siguientes constantes combinadas con OR:
WCONTINUED |
Se devolverá el estado de cualquier proceso hijo continuado cuyo
estado no ha sido reportado desde que continuó de una parada por
control de trabajos o ha sido reportado solo por llamadas a
pcntl_waitid() con el flag
WNOWAIT establecido.
|
WEXITED |
Esperar procesos que han finalizado. |
WNOHANG |
No bloquear si no hay estado disponible; devolver inmediatamente. |
WNOWAIT |
Mantener el proceso cuyo estado se devuelve en
info en un estado esperable. Esto no
afectará el estado del proceso; el proceso puede ser esperado de nuevo
después de que esta llamada se complete.
|
WSTOPPED |
Se devolverá el estado de cualquier hijo que se haya detenido al
recibir una señal, y cuyo estado no ha sido reportado desde que se
detuvo o ha sido reportado solo por llamadas a
pcntl_waitid() con el flag
WNOWAIT establecido.
|
resource_usage
El parámetro resource_usage
se establece en un array
que contiene estadísticas de uso de recursos del proceso hijo.
Esto se admite ya sea si la llamada al sistema wait6 está disponible
(por ejemplo, en FreeBSD), o en Linux a través de la llamada al sistema
waitid en bruto.
pcntl_waitid() devuelve true
si
WNOHANG
fue especificado y no hay estado disponible para
ningún proceso especificado por idtype
y
id
.
pcntl_waitid() devuelve true
debido al cambio de estado
de uno de sus hijos.
De lo contrario, se devuelve false
y pcntl_get_last_error()
puede usarse para obtener el número de error errno
.
Nota:
Una vez obtenido un número de error
errno
, pcntl_strerror() puede usarse para obtener el mensaje de texto asociado a él.
ECHILD |
El proceso que llama no tiene procesos hijos no esperados existentes. |
EINTR |
pcntl_waitid() fue interrumpido por una señal. |
EINVAL |
Se especificó un valor no válido para flags , o
idtype y id especifican un
conjunto no válido de procesos.
|