<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.event.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'event.constructing.signal.events.php',
    1 => 'Construcci&oacute;n de un evento de tipo se&ntilde;al',
    2 => 'Construcci&oacute;n de un evento de tipo se&ntilde;al',
  ),
  'up' => 
  array (
    0 => 'book.event.php',
    1 => 'Event',
  ),
  'prev' => 
  array (
    0 => 'event.callbacks.php',
    1 => 'Funciones de retrollamada de eventos',
  ),
  'next' => 
  array (
    0 => 'class.event.php',
    1 => 'Event',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/event/event.constructing.signal.events.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="event.constructing.signal.events" class="chapter">
 <h1 class="title">Construcción de un evento de tipo señal</h1>

 <p class="para">
  Un evento puede también supervisar las señales de estilo POSIX.
  Para construir un gestor para una señal, utilice el método
  <span class="methodname"><a href="event.construct.php" class="methodname">Event::__construct()</a></span> con el flag
  <strong><code><a href="class.event.php#event.constants.signal">Event::SIGNAL</a></code></strong> o el método factorial
  <span class="methodname"><a href="event.signal.php" class="methodname">Event::signal()</a></span>.
 </p>
 <div class="example" id="example-1">
  <p><strong>Ejemplo #1 Gestión de una señal <code class="literal">SIGTERM</code></strong></p>
  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/*<br />Ejecute este ejemplo en un terminal:<br /><br />$ php examples/signal.php<br /><br />En otro terminal, encuentre el pid y envíe la señal SIGTERM, es decir:<br /><br />$ ps aux | grep examp<br />ruslan    3976  0.2  0.0 139896 11256 pts/1    S+   10:25   0:00 php examples/signal.php<br />ruslan    3978  0.0  0.0   9572   864 pts/2    S+   10:26   0:00 grep --color=auto examp<br />$ kill -TERM 3976<br /><br />En el primer terminal, debería capturar lo siguiente:<br /><br />Caught signal 15<br />*/<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyEventSignal </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$base</span><span style="color: #007700">, </span><span style="color: #0000BB">$ev</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base </span><span style="color: #007700">= </span><span style="color: #0000BB">$base</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ev </span><span style="color: #007700">= </span><span style="color: #0000BB">Event</span><span style="color: #007700">::</span><span style="color: #0000BB">signal</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">, </span><span style="color: #0000BB">SIGTERM</span><span style="color: #007700">, array(</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">'eventSighandler'</span><span style="color: #007700">));<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">();<br />    }<br /><br />    public function </span><span style="color: #0000BB">eventSighandler</span><span style="color: #007700">(</span><span style="color: #0000BB">$no</span><span style="color: #007700">, </span><span style="color: #0000BB">$c</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"Caught signal </span><span style="color: #0000BB">$no</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exit</span><span style="color: #007700">();<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$base </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventBase</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$c    </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyEventSignal</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$base</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">loop</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div>
 <p class="para">
  Tenga en cuenta que las funciones de retrollamada de una señal se ejecutan en el bucle de eventos después de que la señal haya ocurrido, por lo tanto, es más seguro para la señal llamar a funciones desde el bucle que no se supone que se llamen desde un gestor de señales POSIX clásico.
 </p>
 <p class="para"/>
 <p class="para">
  Véase también la
  <a href="http://www.wangafu.net/~nickm/libevent-book/Ref4_event.html#_constructing_signal_events" class="link external">&raquo;&nbsp;
  programación de red fácil, portable y no bloqueante con Libevent; Construcción de un evento de tipo señal</a>.
 </p>
</div>
<?php manual_footer($setup); ?>