Tengo un simple script Perl que simplemente imprime una línea de texto a stdout. Lo que quiero lograr es que mientras este script se ejecuta, si yo (u otra persona) emite una señal para que pare el proceso, quiero que atrape esa señal y salga limpiamente. El código que tengo tiene el siguienteSeñales de trapping limpiamente en Perl
#!/usr/bin/perl -w
$| = 1;
use sigtrap 'handler' => \&sigtrap, 'HUP', 'INT','ABRT','QUIT','TERM';
while(1){
print "Working...\n";
sleep(2);
}
sub sigtrap(){
print "Caught a signal\n";
exit(1);
}
Aunque esto funciona bien cuando en realidad pulse Ctrl-C desde la línea de comandos, si emitir una
kill -9 <pid>
Sólo muere. ¿Cómo hago para ejecutar algo antes de salir? Mi idea general es utilizar este marco para capturar cuando este script muere en un servidor debido a un reinicio del servidor por mantenimiento o falla.
Gracias de antemano
Al presionar 'Ctrl-C' se envía la señal' INT' ** no ** 'TERM', aunque la acción predeterminada es la misma para un proceso interactivo. Cualquiera de las señales puede ser capturada, a diferencia de 'kill -9'. Un 'kill -l' listará nombres de señal. Un 'stty -a' mostrará la asignación predeterminada de' INT' a 'Ctrl-C'. – JRFerguson
¡Ay! Gracias por aclarar eso y disculpas por desinformar. –