Estou desenvolvendo um aplicativo e gostaria que ele imprimisse algumas estatísticas de tempo de execução no console sob demanda. kill
e sinais vieram à minha mente imediatamente.
Ler os sinais do Unix no Wiki SIGINFO
parece 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:
- Por que está
SIGINFO
faltando no meu sistema? Está ausente em todos os sistemas GNU Linux? - 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?
- 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?
^T
aparecem na saída destty -a
?dd
com o do meu Mac.^T
durante add
execução não faz nada na máquina Linux - atualizarei a pergunta de acordo.Respostas:
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 info
entrada para o controle-T que faz com que o kernel seja entregueSIGINFO
aotty
grupo 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.)
fonte
Em relação à sua pergunta 1):
Em
man 7 signal
um sistema Arch Linux:Por essa definição,
SIGINFO
apenas está disponível nas arquiteturas alfa ou sparc.fonte