Como executo um processo e envio um SINAL enquanto ele está em execução?

Como executo um processo e envio um SINAL enquanto ele está em execução?

Eu preciso executar um programa xyz. Termina a execução em poucos segundos. Tem algum tratamento de sinal que preciso testar. A partir do shell ou de um script bash, como executo o programa e, enquanto ele está em execução, envio um sinal como kill -14.

Atualmente, o comando que estou tentando é

/usr/local/xyz input > some_file 2>&1 & PIDOS=$! && kill -14 $PIDOS

Não parece acionar o tratamento do sinal.

Responder1

Esse comando parece ok. Embora quando tentei isso, parece que o comando foi muito rápido. É como se meu script de teste não tivesse tido tempo de instalar o manipulador de sinal antes de ser disparado.

Um script de teste:

$ echo '$SIG{USR1} = sub { print "GOT SIGNAL\n" }; sleep 100' >  sigtest.pl

Atire imediatamente: (o sono está lá, então o próximo prompt não é impresso imediatamente)

$ perl sigtest.pl & kill -USR1 $! ; sleep 1
[1] 8825
[1]+  User defined signal 1   perl sigtest.pl

Não imprimiu nada, mas morreu com o sinal. Vamos dar um tempo:

perl sigtest.pl & ( sleep 0.5 ; kill -USR1 $! )
[1] 8827
GOT SIGNAL
[1]+  Done                    perl sigtest.pl

Agora funcionou, o manipulador de sinal disparou. (o sinal interrompeu o sleep, então o script foi encerrado mesmo assim).

informação relacionada