Si le digo a Perl para ignorar una señal de forma explícita, SIGINT no tiene ningún efecto:¿Cuál es la diferencia entre ignorar una señal y decirle que no haga nada en Perl?
$SIG{INT} = 'IGNORE';
my $count = 0;
say $count++ and sleep 1 while 1;
A continuación, pulsar Control-C, en lugar obviamente, no tiene ningún efecto. Si, por otro lado, le digo que no haga nada:
$SIG{INT} = sub { };
my $count = 0;
say $count++ and sleep 1 while 1;
¡Entonces presionar Control-C tiene un efecto! Despierta el programa de su llamada sleep() e inmediatamente incrementa el conteo. ¿Cuál es la diferencia entre ignorar una señal y decirle que no haga nada?
En mi programa, me gustaría tener el código ejecutado en SIGINT, sin que lo interrumpa todo. Quiero algo como:
$SIG{INT} = sub { say "Caught SIGINT!"; return IGNORED; }; # runs without disrupting sleep
¿Cómo podría funcionar su manejador de señal sin interrumpir lo que se está ejecutando actualmente? La lógica de manejo de señal tendrá que saber lo que se supone que sucederá ANTES de que se produzca la señal. – innaM