Posso fazer Ctrl-C em um processo filho fazer algumas ações no processo pai?

3

Eu trabalho em um aplicativo da web que usa memcache , mongodb etc juntamente com uma estrutura da Web baseada em python . python precisa estar em primeiro plano para que eu possa ver a saída do console ou inserir o depurador, se necessário.

Atualmente, tenho um start.sh

memcache_start
mongodb_start
python fg

e stop.sh

memcache_stop
mongodb_stop

scripts que automatizam tudo.

Normalmente eu mato o python em fg usando Ctrl - C que mata o python . Agora preciso executar explicitamente o stop.sh para desativar o sistema com graça.

É possível que o start.sh esteja ciente da Ctrl - C SIGINT , para que eu possa executar os comandos de parada também, já que é logicamente próxima ação sucessiva que tem que ser realizada?

    
por Nishant 07.11.2016 / 13:06

1 resposta

1

Use trap ' ' INT antes de executar python para informar ao shell para ignorar SIGINT e trap - INT para restaurar o comportamento padrão:

memcache_start
mongodb_start
trap ' ' INT
python fg
trap - INT
memcache_stop
mongodb_stop

Após a linha trap ' ' INT , o shell é instruído a ignorar SIGINT, mas python não é afetado por isso. Então, quando você apertar Ctrl + C , python fecha normalmente, mas o shell continua, executando os demais comandos de limpeza do seu script. O segundo comando, trap - INT não é estritamente necessário, ele permite que você use Ctrl + C novamente para parar o processo de limpeza. Ou seja, se você enviar SIGINT para memcache_stop , o shell não tentará executar mongodb_stop e simplesmente sairá.

Aqui é um artigo detalhado descrevendo como o SIGINT / SIGQUIT é tratado pelos shells.

    
por 07.11.2016 / 15:20