<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.pcntl.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'function.pcntl-waitid.php',
    1 => 'pcntl_waitid',
    2 => 'Ожидает, пока дочерний процесс изменит состояние',
  ),
  'up' => 
  array (
    0 => 'ref.pcntl.php',
    1 => 'Функции модуля PCNTL',
  ),
  'prev' => 
  array (
    0 => 'function.pcntl-wait.php',
    1 => 'pcntl_wait',
  ),
  'next' => 
  array (
    0 => 'function.pcntl-waitpid.php',
    1 => 'pcntl_waitpid',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/pcntl/functions/pcntl-waitid.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.pcntl-waitid" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">pcntl_waitid</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.4.0)</p><p class="refpurpose"><span class="refname">pcntl_waitid</span> &mdash; <span class="dc-title">Ожидает, пока дочерний процесс изменит состояние</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.pcntl-waitid-description">
  <h3 class="title">Описание</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>pcntl_waitid</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$idtype</code><span class="initializer"> = <strong><code><a href="pcntl.constants.php#constant.p-all">P_ALL</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.integer.php" class="type int">int</a></span></span> <code class="parameter">$id</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$info</code><span class="initializer"> = []</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$flags</code><span class="initializer"> = <strong><code><a href="pcntl.constants.php#constant.wexited">WEXITED</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$resource_usage</code><span class="initializer"> = []</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   Функция получает информацию о статусе, которая относится к событиям завершения,
   остановки и (или) продолжения в дочерних процессах родительского процесса.
  </p>

  <p class="para">
   Функция заблокирует процесс, который вызвал дочерние процессы, до тех пор, пока не возникнет ошибка
   или у функции не появится доступ к информации о состоянии, которая удовлетворяет каждому из следующих условий,
   если только не передали флаг <strong><code><a href="pcntl.constants.php#constant.wnohang">WNOHANG</a></code></strong>:
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      Информация о статусе поступила от дочернего процесса в наборе дочерних процессов,
      который указали через аргументы <code class="parameter">idtype</code>
      и <code class="parameter">id</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Изменение состояния дочернего процесса в информации о статусе совпало с флагом в объединении флагов
      изменения состояния, которое установили через аргумент <code class="parameter">flags</code>.
     </span>
    </li>
   </ul>
  </p>

  <p class="para">
   Функция вернёт результат немедленно, если доступ к информации об изменении статуса дочернего процесса
   появился до вызова функции <span class="function"><strong>pcntl_waitid()</strong></span>. Порядок, в котором функция
   сообщит о статусе дочерних процессов, не определили, если доступ к информации об изменении статуса появился
   для двух или большего количества дочерних процессов.
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Документация касается POSIX-спецификации
    функции <code class="literal">waitid</code>, и ряд дополнительных параметров,
    которые характерны для реализации функции в системах Linux, NetBSD и FreeBSD. Подробнее
    о работе функции <code class="literal">waitid</code> в текущей системе рассказывает
    man-страница руководства к функции <code class="literal">waitid(2)</code> конкретной системы.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.pcntl-waitid-parameters">
  <h3 class="title">Список параметров</h3>
  <dl>
   
    <dt><code class="parameter">idtype</code></dt>
    <dt><code class="parameter">id</code></dt>
    <dd>
     <span class="simpara">
      Через аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code>
      указывают, какие дочерние процессы ожидать.
     </span>
     <table class="doctable table">
      <caption><strong>Аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code> POSIX-стандарта</strong></caption>
      
       <tbody class="tbody">
        <tr>
         <td>Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_ALL</code></td>
         <td>
          Функция игнорирует аргумент <code class="parameter">id</code> и ожидает изменения состояния каждого дочернего процесса.
         </td>
        </tr>

        <tr>
         <td>Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_PID</code></td>
         <td>
          Функция ожидает изменения состояния дочернего процесса,
          идентификатор которого равен значению аргумента <code class="parameter">id</code>.
         </td>
        </tr>

        <tr>
         <td>Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_PGID</code></td>
         <td>
          Функция ожидает изменения состояния каждого дочернего процесса,
          идентификатор группы которого равен значению аргумента <code class="parameter">id</code>.
         </td>
        </tr>

       </tbody>
      
     </table>

     <table class="doctable table">
      <caption><strong>Аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code>, характерные для Linux-систем</strong></caption>
      
       <tbody class="tbody">
        <tr>
         <td>Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_PIDFD</code> (с Linux 5.4)</td>
         <td>
          Функция ожидает изменения состояния дочернего процесса, на который ссылается
          PID-идентификатор дескриптора файла, который указали в аргументе <code class="parameter">id</code>.
          Подробнее о PID-идентификаторе дескриптора файла
          рассказывает man-страница руководства к функции <code class="literal">pidfd_open(2)</code>.
         </td>
        </tr>

       </tbody>
      
     </table>

     <table class="doctable table">
      <caption><strong>Аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code>, характерные для ОС NetBSD и FreeBSD</strong></caption>
      
       <tbody class="tbody">
        <tr>
         <td>
          Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_UID</code>
         </td>
         <td>
          Функция ожидает процессы, эффективный идентификатор пользователя которых
          равен значению аргумента <code class="parameter">id</code>.
         </td>
        </tr>

        <tr>
         <td>
          Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_GID</code>
         </td>
         <td>
          Функция ожидает процессы, эффективный идентификатор группы которых
          равен значению аргумента <code class="parameter">id</code>.
         </td>
        </tr>

        <tr>
         <td>
          Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_SID</code>
         </td>
         <td>
          Функция ожидает процессы, идентификатор сессии которых равен значению аргумента
          <code class="parameter">id</code>. Идентификатор сессии дочернего процесса
          и идентификатор дочернего процесса совпадут, если дочерний процесс запустил свою сессию,
          иначе идентификатор сессии дочернего процесса совпадёт с идентификатором сессии родительского процесса.
         </td>
        </tr>

       </tbody>
      
     </table>

     <table class="doctable table">
      <caption><strong>Аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code>, характерные для ОС FreeBSD</strong></caption>
      
       <tbody class="tbody">
        <tr>
         <td>
          Значение аргумента <code class="parameter">idtype</code> равно <code class="literal">P_JAILID</code>
         </td>
         <td>
          Функция ожидает процессы внутри изоляции, чей идентификатор равен значению
          аргумента <code class="parameter">id</code>.
         </td>
        </tr>

       </tbody>
      
     </table>

    </dd>
   
   
    <dt><code class="parameter">info</code></dt>
    <dd>
     <p class="para">
      Функция заполнит параметр <code class="parameter">info</code> массивом,
      который одержит информацию о сигнале.
     </p>
     <p class="para">
      Массив <code class="parameter">info</code> содержит следующие ключи:
      <ul class="simplelist">
       <li><code class="literal">signo</code>: Номер сигнала</li>
       <li><code class="literal">errno</code>: Номер системной ошибки</li>
       <li><code class="literal">code</code>: Код сигнала</li>
       <li>
         <code class="literal">status</code>: Значение, которое процесс вернул при выходе, или сигнал,
         который изменил состояние процесса
       </li>
       <li><code class="literal">pid</code>: Идентификатор процесса, который отправил сигнал</li>
       <li><code class="literal">uid</code>: Реальный идентификатор пользователя процесса, который отправил сигнал</li>
       <li><code class="literal">utime</code>: Время, которое затратил пользователь</li>
       <li><code class="literal">stime</code>: Время, которое затратила система</li>
      </ul>
     </p>
    </dd>
   
   
    <dt><code class="parameter">flags</code></dt>
    <dd>
     <p class="para">
      Значение аргумента <code class="parameter">flags</code> состоит из нуля или большего количества
      следующих констант, которые объединили побитовым оператором ИЛИ:
      <table class="doctable table">
       <caption><strong>Возможные значения аргумента <code class="parameter">flags</code></strong></caption>
       
        <tbody class="tbody">
         <tr>
          <td><strong><code><a href="pcntl.constants.php#constant.wcontinued">WCONTINUED</a></code></strong></td>
          <td>
           Возвращать статус дочернего процесса, который продолжает работу
           и о статусе которого либо не сообщалось, поскольку процесс продолжился
           после остановки управления заданием, либо сообщалось только через
           вызовы функции <span class="function"><strong>pcntl_waitid()</strong></span>
           с флагом <strong><code><a href="pcntl.constants.php#constant.wnowait">WNOWAIT</a></code></strong>.
          </td>
         </tr>

         <tr>
          <td><strong><code><a href="pcntl.constants.php#constant.wexited">WEXITED</a></code></strong></td>
          <td>
           Ожидать процессы, которые сообщили о выходе.
          </td>
         </tr>

         <tr>
          <td><strong><code><a href="pcntl.constants.php#constant.wnohang">WNOHANG</a></code></strong></td>
          <td>
           Не зависать, если статус недоступен; немедленно вернуть результат.
          </td>
         </tr>

         <tr>
          <td><strong><code><a href="pcntl.constants.php#constant.wnowait">WNOWAIT</a></code></strong></td>
          <td>
           Сохранять процесс, статус которого возвращается в параметре <code class="parameter">info</code>,
           в состоянии ожидания. Это не влияет на состояние процесса;
           процесс разрешается ожидать снова после завершения этого вызова.
          </td>
         </tr>

         <tr>
          <td><strong><code><a href="pcntl.constants.php#constant.wstopped">WSTOPPED</a></code></strong></td>
          <td>
           Возвращать статус дочернего процесса,
           который остановился после получения сигнала и статус которого
           либо не сообщался с момента остановки процесса, либо о статусе сообщалось
           только через вызовы функции <span class="function"><strong>pcntl_waitid()</strong></span>
           с флагом <strong><code><a href="pcntl.constants.php#constant.wnowait">WNOWAIT</a></code></strong>.
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
    </dd>
   
   
    <dt><code class="parameter">resource_usage</code></dt>
    <dd>
     <p class="para">
      Функция заполнит переменную <code class="parameter">resource_usage</code> массивом
      со статистикой потребления ресурсов дочерним процессом.

      Функция заполняет переменную, только если в системах наподобие FreeBSD доступен системный вызов wait6
      или в ОС Linux при доступности прямого системного вызова waitid.
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.pcntl-waitid-returnvalues">
  <h3 class="title">Возвращаемые значения</h3>
  <p class="para">
   Функция <span class="function"><strong>pcntl_waitid()</strong></span> возвращает <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>,
   если указали флаг <strong><code><a href="pcntl.constants.php#constant.wnohang">WNOHANG</a></code></strong> и статус недоступен
   ни для одного процесса, который определили аргументами
   <code class="parameter">idtype</code> и <code class="parameter">id</code>.
  </p>

  <p class="para">
   Функция <span class="function"><strong>pcntl_waitid()</strong></span> возвращает <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
   при изменении состояния дочернего процесса.
  </p>

  <p class="para">
   В остальных случаях возвращается <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, а номер ошибки <code class="literal">errno</code>
   получают функцией <span class="function"><a href="function.pcntl-get-last-error.php" class="function">pcntl_get_last_error()</a></span>.
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Текстовое описание номера ошибки <code class="literal">errno</code>
    получают функцией <span class="function"><a href="function.pcntl-strerror.php" class="function">pcntl_strerror()</a></span>.
   </p>
  </p></blockquote>
 </div>


  <div class="refsect1 errors" id="refsect1-function.pcntl-waitid-errors">
  <h3 class="title">Ошибки</h3>
  <table class="doctable table">
   <caption><strong>Значения номера ошибки <code class="literal">errno</code></strong></caption>
   
    <tbody class="tbody">
     <tr>
      <td><strong><code>ECHILD</code></strong></td>
      <td>
       У родительского процесса нет дочерних процессов, которые бы не ожидала функция.
      </td>
     </tr>

     <tr>
      <td><strong><code>EINTR</code></strong></td>
      <td>
       Выполнение функции <span class="function"><strong>pcntl_waitid()</strong></span> прервал сигнал.
      </td>
     </tr>

     <tr>
      <td><strong><code>EINVAL</code></strong></td>
      <td>
       В аргументе <code class="parameter">flags</code> передали недопустимое значение
       или через аргументы <code class="parameter">idtype</code> и <code class="parameter">id</code>
       указали недопустимый набор процессов.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 changelog" id="refsect1-function.pcntl-waitid-changelog">
  <h3 class="title">Список изменений</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Версия</th>
      <th>Описание</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.5.0</td>
      <td>
       Добавили параметр <code class="parameter">resource_usage</code>.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 seealso" id="refsect1-function.pcntl-waitid-seealso">
  <h3 class="title">Смотрите также</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.pcntl-waitpid.php" class="function" rel="rdfs-seeAlso">pcntl_waitpid()</a> - Ожидает или возвращает статус порождённого дочернего процесса</span></li>
    <li><span class="function"><a href="function.pcntl-wait.php" class="function" rel="rdfs-seeAlso">pcntl_wait()</a> - Ожидает или возвращает статус порождённого дочернего процесса</span></li>
    <li><span class="function"><a href="function.pcntl-fork.php" class="function" rel="rdfs-seeAlso">pcntl_fork()</a> - Разветвить (fork) текущий запущенный процесс</span></li>
    <li><span class="function"><a href="function.pcntl-signal.php" class="function" rel="rdfs-seeAlso">pcntl_signal()</a> - Устанавливает обработчик сигнала</span></li>
    <li><span class="function"><a href="function.pcntl-wifexited.php" class="function" rel="rdfs-seeAlso">pcntl_wifexited()</a> - Проверяет, соответствует ли код завершения процесса нормальному завершению</span></li>
    <li><span class="function"><a href="function.pcntl-wifstopped.php" class="function" rel="rdfs-seeAlso">pcntl_wifstopped()</a> - Проверяет, остановлен ли дочерний процесс</span></li>
    <li><span class="function"><a href="function.pcntl-wifsignaled.php" class="function" rel="rdfs-seeAlso">pcntl_wifsignaled()</a> - Проверить, соответствует ли код завершения процесса завершению по сигналу</span></li>
    <li><span class="function"><a href="function.pcntl-wexitstatus.php" class="function" rel="rdfs-seeAlso">pcntl_wexitstatus()</a> - Получить код возврата завершённого дочернего процесса</span></li>
    <li><span class="function"><a href="function.pcntl-wtermsig.php" class="function" rel="rdfs-seeAlso">pcntl_wtermsig()</a> - Получить сигнал, из-за которого был принудительно завершён дочерний процесс</span></li>
    <li><span class="function"><a href="function.pcntl-wstopsig.php" class="function" rel="rdfs-seeAlso">pcntl_wstopsig()</a> - Получить сигнал, из-за которого был остановлен дочерний процесс</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>