Necesito ejecutar un programa xyz. Finaliza la ejecución en unos segundos. Tiene algún manejo de señal que necesito probar. Desde el shell o un script bash, ¿cómo ejecuto el programa y mientras se ejecuta le envío una señal como kill -14
.
Actualmente, el comando que estoy probando es
/usr/local/xyz input > some_file 2>&1 & PIDOS=$! && kill -14 $PIDOS
No parece activar el manejo de la señal.
Respuesta1
Ese comando se ve bien. Aunque cuando lo intenté, parece que el comando era demasiado rápido. Es como si mi script de prueba no tuviera tiempo de instalar el controlador de señales antes de dispararlo.
Un guión de prueba:
$ echo '$SIG{USR1} = sub { print "GOT SIGNAL\n" }; sleep 100' > sigtest.pl
Dispárelo inmediatamente: (el modo de suspensión está ahí, por lo que el siguiente mensaje no se imprime inmediatamente)
$ perl sigtest.pl & kill -USR1 $! ; sleep 1
[1] 8825
[1]+ User defined signal 1 perl sigtest.pl
No imprimió nada, pero murió con la señal. Démosle un poco de tiempo:
perl sigtest.pl & ( sleep 0.5 ; kill -USR1 $! )
[1] 8827
GOT SIGNAL
[1]+ Done perl sigtest.pl
Ahora funcionó, el manejador de señales disparó. (La señal interrumpió el script sleep
, por lo que el script salió de todos modos).