“kill -l” retorna somente ZERR

0

Ao tentar enviar SIGQUIT , recebi isto:

$ kill -s QUIT 4341      
kill: unknown signal: SIGQUIT
kill: type kill -l for a list of signals

E fiquei muito surpreso ao ver isso:

$ kill -l
ZERR

Então, de alguma forma, kill não conhece todos os nomes de sinal. Este é o Ubuntu artful (sim hora de atualizá-lo, mas é outro problema)

Obviamente, enviei SIGQUIT usando apenas um número 3 , mas o que poderia fazer com que kill esquecesse os nomes dos sinais?

UPD: isso é zsh.

$ type kill     
kill is a shell builtin                
$ echo $ZSH_VERSION $ZSH_PATCHLEVEL                                                             
5.0.2 1.5778                           

Eu verifiquei que /bin/kill funciona bem, então deve ser algo específico do zsh.

    
por Dmitry Frank 24.10.2018 / 21:58

2 respostas

2

Seu shell é quase certamente zsh , e você provavelmente tem kill definido como um alias ou uma função (verifique com type kill ).

Mas ainda não consigo reproduzir seu caso:

zsh$ kill -l 30
PWR
zsh$ kill -l 31
SYS
zsh$ kill -l 32
32
zsh$ kill -l -96
32

32 é o índice de "ZERR" na tabela de nomes de sinais de zsh , mas, como visto, (pelo menos no meu sistema) está corretamente fixado ao número de sinal máximo ( 31 ).

Atualize sua pergunta com a versão do seu zsh ( echo $ZSH_VERSION $ZSH_PATCHLEVEL ) e do seu sistema operacional ( uname -a ). Eu acho que foi uma daquelas correções ruins que apodrecem nas portas de distribuição ("correções" rápidas não vetadas pelos desenvolvedores upstream).

Atualização:

Tente instalar o pacote zsh do hábil repositório (versão 5.2.5) ou recompilar uma versão recente do zsh da fonte.

O problema foi realmente causado por um bug em versões anteriores de zsh - os linemarks gerados por gcc / cpp (as linhas # lnum_of_definition "header.h" 3 4 adicionadas antes das expansões de macros definidas nos cabeçalhos do sistema), estavam confundindo o script signames2.awk usado para gerar a lista de sinais e números . Observe que, em vez de corrigir esse script, eles simplesmente impediram a geração de marcadores de linha com a opção -P de cpp na versão recente de zsh .

Veja aqui . Graças a @ Stéphane Chazelas pela dica - eu olhei para esses scripts de awk , mas minha falta de talento me fez não considerá-los como culpados, uma vez que eles não foram alterados em eras.

    
por 25.10.2018 / 02:48
3

Isso tem que ser um problema em como o seu executável zsh foi construído. A lista de sinais é determinada em tempo de compilação do sistema operacional. O “sinal falso” ZERR , que representa as saídas devido a um erro e não devido a um sinal, é adicionado no final da lista. Em sua construção, de alguma forma, a lista de sinais do sistema operacional está vazia.

Stéphane Chazelas identificou um provável culpado , que é um < a href="https://www.zsh.org/mla/workers/2015/msg00212.html"> incompatibilidade agora corrigida dos scripts de compilação com versões recentes do compilador GCC . Se você acabou de construir uma versão mais recente do zsh, o problema deve ser resolvido. Mas note que o Ubuntu Artful vem com o zsh 5.2, que é mais recente que sua versão. Até mesmo o lançamento de suporte de longo tempo anterior do Ubuntu tem 5.1.1. Portanto, não há motivo para manter sua própria compilação, a menos que você precise dessa versão mais antiga para testes de compatibilidade. Se você realmente precisar manter essa versão mais antiga, crie-a com uma versão mais antiga do GCC.

    
por 25.10.2018 / 13:31

Tags