Como eu executo um processo e envio um SINAL enquanto ele está rodando?

0

Eu preciso executar um programa xyz. Termina a execução em alguns 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á sendo executado, 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 processamento do sinal.

    
por Un1x 27.09.2016 / 22:36

1 resposta

3

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

Um script de teste:

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

Grave 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 ao 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 foi acionado. (o sinal interrompeu o sleep , então o script saiu de qualquer maneira).

    
por 27.09.2016 / 23:18