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