PHP Conference Japan 2024

pcntl_waitid

(PHP 8 >= 8.4.0)

pcntl_waitid等待子进程状态改变

描述

pcntl_waitid(
    int $idtype = P_ALL,
    ?int $id = null,
    array &$info = [],
    int $flags = WEXITED
): bool

获取调用者子进程中终止、停止和/或继续事件的相关状态信息。

除非传递了WNOHANG标志,否则调用进程将被阻塞,直到发生错误或获得满足以下所有条件的状态信息:

  • 状态信息来自由idtypeid参数指定的子进程集合中的一个子进程。
  • 状态信息中的状态更改与flags参数中设置的状态更改标志之一匹配。

如果在调用pcntl_waitid()之前有匹配的状态信息可用,则将立即返回。如果两个或多个子进程有匹配的状态信息可用,则报告其状态的顺序未指定。

注意:

本文档涵盖了waitid函数的POSIX规范,以及Linux、NetBSD和FreeBSD实现的一些特定附加参数。请参阅您系统的waitid(2)手册页,了解waitid在您系统上的具体工作方式。

参数

idtype
id
idtypeid参数用于指定要等待的子进程。
POSIX标准idtypeid参数
如果idtypeP_ALL 等待任何子进程,忽略id
如果idtypeP_PID 等待进程ID等于id的子进程。
如果idtypeP_PGID 等待进程组ID等于id的任何子进程。
Linux特定idtypeid参数
如果idtypeP_PIDFD(自Linux 5.4起) 等待由id中指定的PID文件描述符引用的子进程。(有关PID文件描述符的更多信息,请参阅Linux pidfd_open(2)手册页。)
NetBSD和FreeBSD特定idtypeid参数
如果idtypeP_UID 等待有效用户ID等于id的进程。
如果idtypeP_GID 等待有效组ID等于id的进程。
如果idtypeP_SID 等待会话ID等于id的进程。如果子进程启动了自己的会话,则其会话ID与其进程ID相同。否则,子进程的会话ID将与调用者的会话ID匹配。
FreeBSD特定idtypeid参数
如果idtypeP_JAILID 等待监狱ID等于id的监狱中的进程。
info

info参数设置为一个包含有关信号信息的数组。

info数组可能包含以下键:

  • signo:信号编号
  • errno:系统错误编号
  • code:信号代码
  • status:退出值或信号
  • pid:发送进程ID
  • uid:发送进程的真实用户ID
  • utime:消耗的用户时间
  • stime:消耗的系统时间

flags

flags的值是以下常量值按位或的结果。

flags可能的取值:
WCONTINUED 对于任何继续的子进程,其状态自从它从作业控制停止继续以来尚未报告,或者仅通过使用WNOWAIT标志调用pcntl_waitid()来报告,都将返回状态。
WEXITED 等待已退出的进程。
WNOHANG 如果没有状态可用,则不要挂起;立即返回。
WNOWAIT 将状态在info中返回的进程保持在可等待状态。这不会影响进程的状态;在此调用完成之后,可以再次等待该进程。
WSTOPPED 对于任何在收到信号后停止的子进程,其状态自停止以来尚未报告,或者仅通过使用WNOWAIT标志调用pcntl_waitid()来报告,都将返回状态。

返回值

如果指定了WNOHANG并且对于idtypeid指定的任何进程都不可用状态,则pcntl_waitid()返回true

pcntl_waitid()由于其一个子进程的状态更改而返回true

否则,返回false,并且可以使用pcntl_get_last_error()获取errno错误编号。

注意:

获得errno错误编号后,可以使用pcntl_strerror()获取与其关联的文本消息。

错误/异常

错误编号(errno)值
ECHILD 调用进程没有现有的未等待的子进程。
EINTR pcntl_waitid()被信号中断。
EINVAL flags 指定了无效值,或者 idtypeid 指定了一组无效的进程。

参见

添加笔记

用户贡献笔记

此页面没有用户贡献的笔记。
To Top