(PHP 8 >= 8.4.0)
pcntl_waitid — 等待子进程改变状态
$idtype = P_ALL,$id = null,&$info = [],$flags = WEXITED,&$resource_usage = []获取与终止、停止和/或继续事件有关的状态信息,这些事件发生在调用者的一个子进程中。
   除非传递了 WNOHANG 标志,否则调用进程将被阻塞,直到发生错误,
   或者满足以下所有条件的状态信息变得可用:
   
idtype 和 id 参数指定的一组子进程中的一个子进程的状态信息。
     
    flags 参数中设置的状态更改标志之一匹配。
     
    如果在调用 pcntl_waitid() 之前有匹配的状态信息可用,则返回将是立即的。 如果有两个或两个以上的子进程的匹配状态信息可用,则其状态报告的顺序是未指定的。
注意:
本文档涵盖了 POSIX 规范中
waitid函数的说明,以及在 Linux、NetBSD 和 FreeBSD 上的实现中的一些额外参数。 请查看您系统的waitid(2)man 手册,以获取有关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 文件描述符的详细信息,请参见 Linuxpidfd_open(2)man 手册) | 
| 如果 idtype是P_UID | 等待有效用户 ID 等于 id的进程。 | 
| 如果 idtype是P_GID | 等待有效组 ID 等于 id的进程。 | 
| 如果 idtype是P_SID | 等待会话 ID 等于 id的进程。
          如果子进程启动了自己的会话,其会话 ID 将与其进程 ID 相同。
          否则,子进程的会话 ID 将与调用者的会话 ID 匹配。 | 
| 如果 idtype是P_JAILID | 等待在其 jail 标识符等于 id的 jail 中的进程。 | 
info
      info 参数设置为一个包含有关信号的信息的数组。
     
      info 数组可能包含以下键:
      
signo:信号量errno:系统错误号code:信号代码status:退出值或信号pid:发送进程 IDuid:发送进程的真实用户 IDutime:用户消耗的时间stime:系统消耗的时间flags
      flags 的值是零个或多个以下常量的值,这些常量通过 OR 运算在一起:
      
| WCONTINUED | 为任何继续自作业控制停止的子进程返回状态。
           控制停止后,要么没有报告过其状态,要么只有通过设置了 WNOWAIT标志的 pcntl_waitid() 调用报告过其状态。 | 
| WEXITED | 返回已退出的子进程的状态。 | 
| WNOHANG | 如果没有可用的状态,则不挂起;立即返回。 | 
| WNOWAIT | 保持状态返回在 info中的进程处于可等待状态。
           这不会影响进程的状态;在此调用完成后,可以再次等待该进程。 | 
| WSTOPPED | 返回已停止的子进程的状态。
           控制停止后,要么没有报告过其状态,要么只有通过设置了 WNOWAIT标志的 pcntl_waitid() 调用报告过其状态。 | 
resource_usage
      resource_usage 参数设置为数组,包含子进程的资源使用统计信息。
      此功能在以下两种情况下受支持:一是系统提供 wait6 系统调用(例如 FreeBSD),二是在 Linux 系统上通过原始的 waitid 系统调用实现。
     
   pcntl_waitid() 如果指定了 WNOHANG 并且状态对于由
   idtype 和 id 指定的任何进程都不可用,则返回 true。
  
   如果由于其一个子进程的状态更改而返回 true,则 pcntl_waitid() 返回 true。
  
   否则,返回 false,并且可以使用 pcntl_get_last_error() 来获取 errno 错误号。
  
注意:
一旦获得了一个
errno错误号,可以使用 pcntl_strerror() 来获取与之关联的文本消息。
| ECHILD | 调用进程没有未等待的子进程。 | 
| EINTR | pcntl_waitid() 被一个信号中断。 | 
| EINVAL | 为 flags指定了一个无效值,
       或者idtype和id指定了一组无效的进程。 | 
