¿Cómo ejecuto un proceso y le envío una SEÑAL mientras se está ejecutando?

¿Cómo ejecuto un proceso y le envío una SEÑAL mientras se está ejecutando?

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).

información relacionada