<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.pcntl-signal.php',
    1 => 'pcntl_signal',
    2 => 'Instala un gestor de se&ntilde;ales',
  ),
  'up' => 
  array (
    0 => 'ref.pcntl.php',
    1 => 'Funciones PCNTL',
  ),
  'prev' => 
  array (
    0 => 'function.pcntl-setqos-class.php',
    1 => 'pcntl_setqos_class',
  ),
  'next' => 
  array (
    0 => 'function.pcntl-signal-dispatch.php',
    1 => 'pcntl_signal_dispatch',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/pcntl/functions/pcntl-signal.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.pcntl-signal" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">pcntl_signal</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.1.0, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">pcntl_signal</span> &mdash; <span class="dc-title">Instala un gestor de señales</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.pcntl-signal-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>pcntl_signal</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$signal</code></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>|<span class="type"><a href="language.types.integer.php" class="type int">int</a></span></span> <code class="parameter">$handler</code></span>, <span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$restart_syscalls</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></span></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>pcntl_signal()</strong></span> instala un nuevo gestor
   de señales o reemplaza el gestor de señales actual
   para la señal indicada por el parámetro
   <code class="parameter">signal</code>.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.pcntl-signal-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">signal</code></dt>
     <dd>
      <p class="para">
       El número de la señal.
      </p>
     </dd>
    
    
     <dt><code class="parameter">handler</code></dt>
     <dd>
      <p class="para">
       El gestor de señales. Puede ser un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>,
       que será llamado para gestionar la señal, o bien una de las dos
       constantes globales <strong><code><a href="pcntl.constants.php#constant.sig-ign">SIG_IGN</a></code></strong> o <strong><code><a href="pcntl.constants.php#constant.sig-dfl">SIG_DFL</a></code></strong>,
       que, respectivamente, ignorarán la señal o restaurarán el gestor
       de señales por defecto.
      </p>
      <p class="para">
       Si se proporciona un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span>, debe implementar la siguiente firma:
      </p>
      <p class="para">
       <div class="methodsynopsis dc-description">
        <span class="methodname"><span class="replaceable">handler</span></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$signo</code></span>, <span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$siginfo</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

       <dl>
        
         <dt><code class="parameter">signal</code></dt>
         <dd>
          <span class="simpara">
           La señal a gestionar.
          </span>
         </dd>
        
        
         <dt><code class="parameter">siginfo</code></dt>
         <dd>
          <span class="simpara">
           Si el sistema operativo soporta las estructuras siginfo_t, esto será un array de información de la señal que depende de la señal.
          </span>
         </dd>
        
       </dl>
      </p>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <p class="para">
        Téngase en cuenta que cuando se configura el gestor con un método de objeto,
        el contador de referencia del objeto se incrementa, lo que lo hace persistente
        hasta que se cambie el gestor de señales por otro, o hasta que el script termine.
       </p>
      </p></blockquote>
     </dd>
    
    
     <dt><code class="parameter">restart_syscalls</code></dt>
     <dd>
      <p class="para">
       Especifica si la llamada al sistema de reinicio (restarting) debe ser utilizada
       cuando llega esta señal.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.pcntl-signal-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Esta función retorna <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en caso de éxito o <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si ocurre un error.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.pcntl-signal-changelog">
  <h3 class="title">Historial de cambios</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>Versión</th>
       <th>Descripción</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>7.1.0</td>
       <td>
        A partir de PHP 7.1.0 el gestor de la función de retrollamada tiene
        un segundo argumento que contiene el siginfo de esa señal específica. Estos datos
        solo se proporcionan si el sistema operativo tiene la estructura siginfo_t.
        Si el sistema operativo no implementa siginfo_t, se proporciona NULL.
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.pcntl-signal-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>pcntl_signal()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />pcntl_async_signals</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// gestor de señales del sistema<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sig_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$signo</span><span style="color: #007700">)<br />{<br /><br />     switch (</span><span style="color: #0000BB">$signo</span><span style="color: #007700">) {<br />         case </span><span style="color: #0000BB">SIGTERM</span><span style="color: #007700">:<br />             </span><span style="color: #FF8000">// gestión de la extinción<br />             </span><span style="color: #007700">exit;<br />             break;<br />         case </span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">:<br />             </span><span style="color: #FF8000">// gestión del reinicio<br />             </span><span style="color: #007700">break;<br />         case </span><span style="color: #0000BB">SIGUSR1</span><span style="color: #007700">:<br />             echo </span><span style="color: #DD0000">"Recibida la señal SIGUSR1...\n"</span><span style="color: #007700">;<br />             break;<br />         default:<br />             </span><span style="color: #FF8000">// gestión de otras señales<br />     </span><span style="color: #007700">}<br /><br />}<br /><br />echo </span><span style="color: #DD0000">"Instalación del gestor de señales...\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Instalación de los gestores de señales<br /></span><span style="color: #0000BB">pcntl_signal</span><span style="color: #007700">(</span><span style="color: #0000BB">SIGTERM</span><span style="color: #007700">, </span><span style="color: #DD0000">"sig_handler"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">pcntl_signal</span><span style="color: #007700">(</span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">,  </span><span style="color: #DD0000">"sig_handler"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">pcntl_signal</span><span style="color: #007700">(</span><span style="color: #0000BB">SIGUSR1</span><span style="color: #007700">, </span><span style="color: #DD0000">"sig_handler"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// o bien utilice un objeto<br />// pcntl_signal(SIGUSR1, array($obj, "hacer_algo"));<br /><br /></span><span style="color: #007700">echo</span><span style="color: #DD0000">"Generación de una señal SIGUSR1 a mí mismo...\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// envío de SIGUSR1 al identificador de proceso actual<br />// las funciones posix_* requieren la extensión posix<br /></span><span style="color: #0000BB">posix_kill</span><span style="color: #007700">(</span><span style="color: #0000BB">posix_getpid</span><span style="color: #007700">(), </span><span style="color: #0000BB">SIGUSR1</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"Hecho\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.pcntl-signal-notes">
  <h3 class="title">Notas</h3>
  <p class="para">
   La función <span class="function"><strong>pcntl_signal()</strong></span> no apila
   los gestores de señales, sino que los reemplaza.
  </p>
  <div class="refsect2 unknown-25" id="refsect2-function.pcntl-signal-unknown-25">
   <h4 class="title">Método de dispatch</h4>
   <p class="para">
    Existen varios métodos para dispatchar los gestores de señales:
    <ul class="simplelist">
     <li>Dispatch asíncrono con <span class="function"><a href="function.pcntl-async-signals.php" class="function">pcntl_async_signals()</a></span> activado. Este es el método recomendado</li>
     <li>Establecer la frecuencia de los <a href="control-structures.declare.php#control-structures.declare.ticks" class="link">ticks</a></li>
     <li>Dispatch manual con <span class="function"><a href="function.pcntl-signal-dispatch.php" class="function">pcntl_signal_dispatch()</a></span></li>
    </ul>
   </p>
   <p class="para">
    Cuando las señales son dispatchadas de manera asíncrona o utilizando una ejecución basada en ticks, las funciones bloqueantes como
    <span class="function"><a href="function.sleep.php" class="function">sleep()</a></span> pueden ser interrumpidas.
   </p>
  </div>

 </div>


 <div class="refsect1 seealso" id="refsect1-function.pcntl-signal-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="https://en.wikipedia.org/wiki/Signal_(IPC)" class="link external">&raquo;&nbsp;Signal (IPC)</a> en Wikipedia</li>
    <li><span class="function"><a href="function.pcntl-async-signals.php" class="function" rel="rdfs-seeAlso">pcntl_async_signals()</a> - Activa/desactiva la gesti&oacute;n as&iacute;ncrona de las se&ntilde;ales o devuelve el antiguo par&aacute;metro</span></li>
    <li><span class="function"><a href="function.pcntl-fork.php" class="function" rel="rdfs-seeAlso">pcntl_fork()</a> - Duplica el proceso actual</span></li>
    <li><span class="function"><a href="function.pcntl-signal-dispatch.php" class="function" rel="rdfs-seeAlso">pcntl_signal_dispatch()</a> - Llama a los gestores de se&ntilde;ales para cada se&ntilde;al en espera</span></li>
    <li><span class="function"><a href="function.pcntl-waitpid.php" class="function" rel="rdfs-seeAlso">pcntl_waitpid()</a> - Espera la finalizaci&oacute;n de la ejecuci&oacute;n de un proceso hijo</span></li>
   </ul>
  </p>
 </div>


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