<?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="modifier">function</span> <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="simpara">
       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="modifier">function</span> <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">signo</code></dt>
         <dd>
          <p class="simpara">
           La señal a gestionar.
          </p>
         </dd>
        
        
         <dt><code class="parameter">siginfo</code></dt>
         <dd>
          <p 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.
          </p>
         </dd>
        
       </dl>
      </p>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <p class="simpara">
        Cuando el gestor se configura con un método de objeto, el contador de referencia
        de ese objeto se incrementa, lo que lo hace persistente hasta que el gestor
        se cambie 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>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <p class="simpara">
        Aunque este parámetro tiene como valor predeterminado <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, dicho valor
        predeterminado no se aplica a <strong><code><a href="pcntl.constants.php#constant.sigalrm">SIGALRM</a></code></strong>: cuando
        <code class="parameter">restart_syscalls</code> no se pasa y
        <code class="parameter">signal</code> es <strong><code><a href="pcntl.constants.php#constant.sigalrm">SIGALRM</a></code></strong>,
        el reinicio de las llamadas al sistema queda desactivado. Pase <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
        explícitamente para habilitarlo en <strong><code><a href="pcntl.constants.php#constant.sigalrm">SIGALRM</a></code></strong>.
       </p>
      </p></blockquote>
     </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 errors" id="refsect1-function.pcntl-signal-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <p class="simpara">
   Se lanza una <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span> si
   <code class="parameter">signal</code> es menor que <code class="literal">1</code> o mayor o igual
   a <strong><code>NSIG</code></strong>, o si <code class="parameter">handler</code> es un
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> distinto de <strong><code><a href="pcntl.constants.php#constant.sig-dfl">SIG_DFL</a></code></strong> o <strong><code><a href="pcntl.constants.php#constant.sig-ign">SIG_IGN</a></code></strong>.
  </p>
  <p class="simpara">
   Se lanza una <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> si
   <code class="parameter">handler</code> no es ni un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> ni un
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
  </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.4.0</td>
       <td>
        <code class="parameter">restart_syscalls</code> ahora se tiene en cuenta para
        <strong><code><a href="pcntl.constants.php#constant.sigalrm">SIGALRM</a></code></strong>; anteriormente el reinicio de llamadas al sistema
        siempre estaba desactivado para esa señal. Cuando no se pasa el argumento,
        el reinicio de llamadas al sistema permanece desactivado para
        <strong><code><a href="pcntl.constants.php#constant.sigalrm">SIGALRM</a></code></strong>.
       </td>
      </tr>

      <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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
pcntl_async_signals</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);

</span><span style="color: #FF8000">// gestor de señales del sistema
</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">)
{

     switch (</span><span style="color: #0000BB">$signo</span><span style="color: #007700">) {
         case </span><span style="color: #0000BB">SIGTERM</span><span style="color: #007700">:
             </span><span style="color: #FF8000">// gestión de la extinción
             </span><span style="color: #007700">exit;
             break;
         case </span><span style="color: #0000BB">SIGHUP</span><span style="color: #007700">:
             </span><span style="color: #FF8000">// gestión del reinicio
             </span><span style="color: #007700">break;
         case </span><span style="color: #0000BB">SIGUSR1</span><span style="color: #007700">:
             echo </span><span style="color: #DD0000">"Recibida la señal SIGUSR1...\n"</span><span style="color: #007700">;
             break;
         default:
             </span><span style="color: #FF8000">// gestión de otras señales
     </span><span style="color: #007700">}

}

echo </span><span style="color: #DD0000">"Instalación del gestor de señales...\n"</span><span style="color: #007700">;

</span><span style="color: #FF8000">// Instalación de los gestores de señales
</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">);
</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">);
</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">);

</span><span style="color: #FF8000">// o bien utilice un objeto
// pcntl_signal(SIGUSR1, array($obj, "hacer_algo"));

</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">;

</span><span style="color: #FF8000">// envío de SIGUSR1 al identificador de proceso actual
// las funciones posix_* requieren la extensión posix
</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">);

echo </span><span style="color: #DD0000">"Hecho\n"</span><span style="color: #007700">;

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

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


 <div class="refsect1 notes" id="refsect1-function.pcntl-signal-notes">
  <h3 class="title">Notas</h3>
  <p class="simpara">
   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">Véase también</h3>
  <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>
 </div>


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