Foros del Web » Programando para Internet » PHP »

Capturar señal SIGINT (cuando se presiona Ctrl-C)

Estas en el tema de Capturar señal SIGINT (cuando se presiona Ctrl-C) en el foro de PHP en Foros del Web. Hola, ¿que tal? Tengo un problemilla, es el siguiente: tengo un script PHP que se ejecuta desde consola (la consola es de GNU/Linux, no es ...
  #1 (permalink)  
Antiguo 06/12/2011, 10:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 47
Antigüedad: 15 años, 8 meses
Puntos: 0
Capturar señal SIGINT (cuando se presiona Ctrl-C)

Hola, ¿que tal?

Tengo un problemilla, es el siguiente: tengo un script PHP que se ejecuta desde consola (la consola es de GNU/Linux, no es necesario que sea multiplataforma) y lo que debe ejecutar es una serie de tareas en un ciclo, la idea es que yo pueda matar el script durante su ejecución, pero quiero evitar que el script "muera" cuando se está en plena realización de una tarea, ya que es necesario que la tarea concluya.

Lo que hago yo es capturar la señal SIGINT que en teoría es la que se emite cuando presiono Ctrl-C en la terminal, al capturar esta señal (con pcntl_signal) asigno una bandera indicando que el script debe terminar. Entonces, cuando termina una tarea reviso el valor de esa bandera y corto el ciclo si es necesario, terminando el script de manera limpia.

La cosa es que el script que hice no funciona :), y no estoy seguro por qué, es el siguiente...

Código PHP:
Ver original
  1. class Command
  2. {
  3.     private $isKilled = false;
  4.    
  5.     public function signalHandler($signal)
  6.     {
  7.         echo "Señal capturada";
  8.         $this->isKilled = true;
  9.     }
  10.    
  11.     public function exec()
  12.     {
  13.         pcntl_signal(SIGINT, array(&$this, 'signalHandler'));
  14.        
  15.         while(1){
  16.             echo "Trabajo ininterrumpible...\n";
  17.             sleep(1);
  18.             if($this->isKilled){
  19.                 break;
  20.             }
  21.         }
  22.        
  23.         echo 'Saliendo...';
  24.     }
  25. }
  26.  
  27. $command = new Command();
  28. $command->exec();

El resultado de este script es que al presionar Ctrl-C el script no muere, pero tampoco parece ejecutarse signalHandler (no se imprime "Señal capturada").

¿Alguien podría decirme si estoy haciendo algo mal?
¡Muchas gracias!

Etiquetas: señal
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:24.