Fedora Linux: Maneira de usar stty (ou equivalente) para ligar a chave para levantar SIGUSR1 para aplicação?

4

Estou usando o FC 14, mas esta é provavelmente uma questão genérica do Linux.

Eu quero ser capaz de vincular uma chave no driver de terminal do Linux que fará com que um sinal diferente de SIGINT ou SIGQUIT seja gerado para o aplicativo em execução. Eu não quero cooptar qualquer um desses. Se isso soa um pouco para você, pense nas linhas da antiga funcionalidade CTRL/T , apenas com o sinal sendo capturado e manipulado pelo aplicativo em vez do SO.

Como isso é para o relatório de status de atividades de longa duração, SIGUSR1 parece apropriado. No entanto, se especificamente levantando isso do teclado do terminal não é uma opção, eu vou pegar o que eu posso conseguir. Eu não quero tentar o impossível e pegar SIGKILL B-) mas eu gostaria de poder gerar sinais diferentes de SIGQUIT e SIGINT do teclado do terminal.

Cenário:

  1. Configure o terminal para fazer a coisa de levantar o sinal
  2. Executar aplicativo a partir do shell na janela do terminal
  3. Espere até entrar na complexa seção de longa duração
  4. Pressione CTRL/whatzit para aumentar o sinal
  5. O aplicativo captura o sinal, faz algum tipo de relatório de status e retoma

Eu poderia fazer isso sem problemas no VMS / OpenVMS, e isso meio que congelaria meus abóboras para pensar que é mais difícil no Linux.

    
por RoUS 11.07.2011 / 22:00

1 resposta

2

A interface para levantar sinais via personagens mágicas não é, infelizmente, uma coisa genérica de bind-character-to-signal - há certos sinais específicos que podem ser gerados assim, e você pode escolher o personagem, mas não o sinal: consulte o capítulo relevante da especificação POSIX .

(Além de SIGINT e SIGQUIT , sua outra opção para cooptar um sinal é SIGTSTP , se você puder viver sem poder interromper seu processo com ^Z - o que eu acho que pode ser o caso você esteja esperando deixá-lo rodando em primeiro plano de qualquer maneira.)

    
por 12.07.2011 / 02:39