Programa Wrapper que define o manipulador de sinal

4

Eu gostaria de ter um programa wrapper que execute um determinado comando e configure um manipulador de sinal para que ele seja executado quando o comando receber um sinal especificado.

A questão é esta:

  1. Existe um programa utilitário para fazer isso?
  2. Se não, é possível fazer isso usando os comandos do bash trap e exec ?
  3. Se não, como posso fazer isso? (por exemplo, escrevendo um programa em C que faz algumas chamadas do sistema)

EDIT: A plataforma de destino é GNU / Linux.

EDIT 2: Após a resposta de Ignacio, eu consegui escrever um pré-carregamento SO que se parece com isso .

    
por Pteromys 07.11.2011 / 04:43

2 respostas

4

Não pode ser feito. Na página exec(3p) man:

Signals set to be caught by the calling process image shall be set to the default action in the new process image.

Você teria que escrever um pré-carregamento SO que conectaria os manipuladores de sinal antes do início do programa.

    
por 07.11.2011 / 04:54
1

Você só pode ignorar os sinais ( SIG_IGN ); você não seria capaz de fornecer um manipulador de sinal a partir do shell ( trap ) ou dentro de um programa C ( signal(2) ). Quando exec é chamado, qualquer manipulador de sinal seria substituído.

Exemplo:

:
trap "" 1 2
exec sleep 100000

Em seguida, ligue para o programa, seja em segundo plano ou para frente, e envie um SIGHUP ou SIGINT para o programa. É ignorado. Colocar o código no trap faz com que o sinal seja resetado no exec:

:
trap "echo signal caught" 1 2
exec sleep 10000

Isto não imprime "sinal capturado" de você enviar os sinais, mas na verdade terminará o programa.

    
por 07.11.2011 / 05:07