(PHP 8 >= 8.4.0)
pcntl_waitid — 等待子进程状态改变
获取调用者子进程中终止、停止和/或继续事件的相关状态信息。
除非传递了WNOHANG标志,否则调用进程将被阻塞,直到发生错误或获得满足以下所有条件的状态信息:
idtype和id参数指定的子进程集合中的一个子进程。
flags参数中设置的状态更改标志之一匹配。
如果在调用pcntl_waitid()之前有匹配的状态信息可用,则将立即返回。如果两个或多个子进程有匹配的状态信息可用,则报告其状态的顺序未指定。
注意:
本文档涵盖了
waitid函数的POSIX规范,以及Linux、NetBSD和FreeBSD实现的一些特定附加参数。请参阅您系统的waitid(2)手册页,了解waitid在您系统上的具体工作方式。
idtypeididtype和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的监狱中的进程。 |
infoinfo参数设置为一个包含有关信号信息的数组。
info数组可能包含以下键:
signo:信号编号errno:系统错误编号code:信号代码status:退出值或信号pid:发送进程IDuid:发送进程的真实用户IDutime:消耗的用户时间stime:消耗的系统时间flagsflags的值是以下常量值按位或的结果。
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 指定了一组无效的进程。 |