Falta SIGINFO no GNU Linux (Arch Linux)

12

Estou desenvolvendo um aplicativo e gostaria que ele imprimisse algumas estatísticas de tempo de execução no console sob demanda. kille sinais vieram à minha mente imediatamente.

Ler os sinais do Unix no Wiki SIGINFOparece ser o caminho a seguir, porque:

  • Destina- se a esses fins
  • Não encerra o processo se o manipulador de sinal não estiver implementado (ao contrário de SIGUSRx- veja aqui )

No entanto, inspecionando a saída de kill -l, parece que meu servidor não possui esse sinal implementado.

Minhas perguntas são:

  1. Por que está SIGINFOfaltando no meu sistema? Está ausente em todos os sistemas GNU Linux?
  2. Existe uma maneira fácil (ou seja, sem recompilação do kernel / glibc) para ativar esse sinal? Se não, qual seria o caminho mais difícil?
  3. Que sinal alternativo eu poderia usar para meus propósitos que não causariam efeitos colaterais se não fossem tratados pelo processo de destino? (Eu já presumo que não, pois não encontrei nenhum outro sinal adequado no manual da 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

Atualização: Ainda estou procurando mais informações sobre por que esse sinal é excluído condicionalmente de outros sistemas que não o BSD (veja os comentários abaixo). O sinal parece ser bastante útil para muitos propósitos, por isso é difícil para mim acreditar que é apenas uma questão de capricho - então qual é o verdadeiro impedimento para esse sinal estar disponível no Linux?

Robert Rossmann
fonte
2
Será que ^Taparecem na saída de stty -a?
Mark Plotnick
Ah, não - devo ter confundido o comportamento descrito ddcom o do meu Mac. ^Tdurante a ddexecução não faz nada na máquina Linux - atualizarei a pergunta de acordo.
Robert Rossmann
Sim, Ctrl-T e SIGINFO são recursos BSD (e MacOSX).
Mark Plotnick
Mas o sinal é definido na GNU C Library que os sistemas Linux usam ... É então desativado de propósito?
Robert Rossmann
1
@RobertRossmann, os sinais são entregues pelo kernel. A questão é por que o kernel Linux não o implementa (porque eles copiaram sinais SysV, provavelmente).
Ángel

Respostas:

4

Havia rumores (de volta ao linux 0.x-1.x dias) de adicionar isso (porque era útil em sistemas BSD), mas se bem me lembro, havia razões pelas quais era mais difícil fazer certo no Linux do que BSD na época. .

Observe que o que você está perguntando é apenas uma pequena parte do recurso (ou seja, você está falando sobre uma stty infoentrada para o controle-T que faz com que o kernel seja entregue SIGINFOao ttygrupo de processos) - essa parte é "fácil" - mas fazer com que o kernel relate informações sobre o status do processo quando não manipula o sinal (porque na época muito poucas coisas tinham suporte para isso, o recurso era principalmente sobre "esse processo está girando ou travando" e "qual processo é mesmo assim ") é mais difícil - o ISTR ainda apresenta problemas de segurança / confiança sobre a exibição dessas informações com precisão e se elas devem estar associadas ao caminho da Chave de atenção segura. Dito isto, pode haver algum valor na versão "fácil" que apenas envia o sinal ...

(A partir da memória pessoal; uma rápida pesquisa na web não mostra nada óbvio, mas acho que seria preciso procurar em arquivos realmente antigos para encontrar a discussão.)

eichin
fonte
1

Em relação à sua pergunta 1):

Em man 7 signalum sistema Arch Linux:

SIGINFO 29, -, - Um sinônimo para SIGPWR

...

(O sinal 29 é SIGINFO / SIGPWR em um alfa, mas SIGLOST em um sparc.)

...

O SIGPWR (que não é especificado no POSIX.1-2001) geralmente é ignorado por padrão nos outros sistemas UNIX em que aparece.

Por essa definição, SIGINFOapenas está disponível nas arquiteturas alfa ou sparc.

Guido
fonte