(PHP 8 >= 8.4.0)
pcntl_waitid — 等待子进程状态改变
获取调用者子进程中终止、停止和/或继续事件的相关状态信息。
除非传递了WNOHANG
标志,否则调用进程将被阻塞,直到发生错误或获得满足以下所有条件的状态信息:
idtype
和id
参数指定的子进程集合中的一个子进程。
flags
参数中设置的状态更改标志之一匹配。
如果在调用pcntl_waitid()之前有匹配的状态信息可用,则将立即返回。如果两个或多个子进程有匹配的状态信息可用,则报告其状态的顺序未指定。
注意:
本文档涵盖了
waitid
函数的POSIX规范,以及Linux、NetBSD和FreeBSD实现的一些特定附加参数。请参阅您系统的waitid(2)
手册页,了解waitid
在您系统上的具体工作方式。
idtype
id
idtype
和id
参数用于指定要等待的子进程。
如果idtype 是P_ALL |
等待任何子进程,忽略id 。 |
如果idtype 是P_PID |
等待进程ID等于id 的子进程。 |
如果idtype 是P_PGID |
等待进程组ID等于id 的任何子进程。 |
如果idtype 是P_PIDFD (自Linux 5.4起) |
等待由id 中指定的PID文件描述符引用的子进程。(有关PID文件描述符的更多信息,请参阅Linux pidfd_open(2) 手册页。) |
如果idtype 是P_UID |
等待有效用户ID等于id 的进程。 |
如果idtype 是P_GID |
等待有效组ID等于id 的进程。 |
如果idtype 是P_SID |
等待会话ID等于id 的进程。如果子进程启动了自己的会话,则其会话ID与其进程ID相同。否则,子进程的会话ID将与调用者的会话ID匹配。 |
如果idtype 是P_JAILID |
等待监狱ID等于id 的监狱中的进程。 |
info
info
参数设置为一个包含有关信号信息的数组。
info
数组可能包含以下键:
signo
:信号编号errno
:系统错误编号code
:信号代码status
:退出值或信号pid
:发送进程IDuid
:发送进程的真实用户IDutime
:消耗的用户时间stime
:消耗的系统时间flags
flags
的值是以下常量值按位或的结果。
WCONTINUED |
对于任何继续的子进程,其状态自从它从作业控制停止继续以来尚未报告,或者仅通过使用WNOWAIT 标志调用pcntl_waitid()来报告,都将返回状态。 |
WEXITED |
等待已退出的进程。 |
WNOHANG |
如果没有状态可用,则不要挂起;立即返回。 |
WNOWAIT |
将状态在info 中返回的进程保持在可等待状态。这不会影响进程的状态;在此调用完成之后,可以再次等待该进程。 |
WSTOPPED |
对于任何在收到信号后停止的子进程,其状态自停止以来尚未报告,或者仅通过使用WNOWAIT 标志调用pcntl_waitid()来报告,都将返回状态。 |
如果指定了WNOHANG
并且对于idtype
和id
指定的任何进程都不可用状态,则pcntl_waitid()返回true
。
pcntl_waitid()由于其一个子进程的状态更改而返回true
。
否则,返回false
,并且可以使用pcntl_get_last_error()获取errno
错误编号。
注意:
获得
errno
错误编号后,可以使用pcntl_strerror()获取与其关联的文本消息。
ECHILD |
调用进程没有现有的未等待的子进程。 |
EINTR |
pcntl_waitid()被信号中断。 |
EINVAL |
为 flags 指定了无效值,或者 idtype 和 id 指定了一组无效的进程。 |