SIGINFO no GNU Linux (Arch Linux) faltando

11

Estou desenvolvendo um aplicativo e gostaria que ele imprimisse algumas estatísticas de tempo de execução para o console on demand. kill e sinais vieram imediatamente à minha mente.

Ao ler Sinais Unix no Wiki, SIGINFO parece ser o caminho a seguir porque:

  • É destinado para esses fins
  • Não encerra o processo se o manipulador de sinal não estiver implementado (ao contrário de SIGUSRx - consulte aqui )

No entanto, ao inspecionar a saída de kill -l , parece que meu servidor não tem este sinal implementado.

Minhas perguntas são:

  1. Por que SIGINFO está faltando no meu sistema? Está ausente em todos os sistemas GNU Linux?
  2. Existe uma maneira fácil (ou seja, não recompilação de kernel / glibc) para habilitar este sinal? Se não, qual seria o caminho mais difícil?
  3. Qual sinal alternativo eu poderia usar para minhas finalidades, o que não causaria efeitos colaterais se não fosse tratado pelo processo de destino? (Eu já assumo nada desde que não encontrei nenhum outro sinal adequado no manual do glibc )

Metainfo do Linux:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

Update: I am still looking for more information as to why this signal is conditionally excluded from other systems than BSD (see comments below). The signal seems to be quite useful for many purposes so it is hard for me to believe it is just a matter of whim - so what's the real showstopper for this signal to be available on Linux?

    
por Robert Rossmann 16.01.2015 / 19:23

2 respostas

3

Houve uma conversa (de volta no linux 0.x-1.x dias) de adicionar isto (porque era útil em sistemas BSD) mas se bem me lembro havia razões que eram mais difíceis de fazer no Linux do que no BSD na época.

Note que o que você está perguntando é apenas uma pequena parte do recurso (ou seja, você está falando de uma entrada stty info para o controle -T fazendo com que o kernel entregue SIGINFO para o tty ' s grupo de processos) - essa parte é "fácil" - mas ter o kernel relata informações sobre o status do processo quando ele não manipula o sinal (porque na época muito poucas coisas tinham qualquer suporte para aquele , o recurso era principalmente sobre "este processo está girando ou travando" e "qual é o processo de qualquer maneira"? é mais difícil - ISTR tem problemas de segurança / confiança sobre exibir essas informações com precisão e se deve ser associado com a Atenção Segura Caminho chave. Dito isso, pode haver algum valor na versão "fácil" que só envia o sinal ...

(De memória pessoal; uma pesquisa rápida na Web não revela nada óbvio, mas acho que seria necessário pesquisar em arquivos antigos realmente para encontrar a discussão.)

    
por 16.04.2016 / 21:34
1

Em relação à sua pergunta 1):

De man 7 signal em um sistema Arch Linux:

SIGINFO 29,-,- A synonym for SIGPWR

(Signal 29 is SIGINFO / SIGPWR on an alpha but SIGLOST on a sparc.)

SIGPWR (which is not specified in POSIX.1-2001) is typically ignored by default on those other UNIX systems where it appears.

Por esta definição, SIGINFO está disponível apenas em arquiteturas alpha ou sparc.

    
por 27.03.2016 / 00:42