Uma resposta sobre o sinal / erro retorna o status de um processo ... bem ... ok ...
Na página principal Bash (e generalmente na mais documentação da shell ), abaixo na seção intitulada " Shell Grammer " e depois " Comandos Simples ", há uma declaração inocente lendo assim:
The return value of a simple command is its exit status,
or 128+n if the command is terminated by signal n.
O valor de retorno de qualquer processo shell (bash, sh, dash, ksh, csh, et al) (comando simples) é um valor sem sinal de 8 bits, com o intervalo esperado de 0-255. Costumes típicos de uso usam zero (0) como 'sucesso', e qualquer outra coisa como 'erro'. O shell indica que um processo foi interrompido / abortado / sinalizado adicionando 128 ao valor do sinal e usando-o como valor de retorno.
Se você tem idade suficiente, você pode se lembrar de ter abortado o 'Erro 139' (Sinal 11) durante a compilação do kernel (ele usou para levar a noite toda!) se você tivesse memória esquisita ou superaquecimento questões.
O erro 137 indica que o processo apt-get recebeu um sinal 9 (128 + 9 = 137) e o sinal 9 é KILL .
Se você estiver confuso nos nomes de sinal versus números, veja a saída do comando kill -l
:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
... lots more ... 64 total
Aha! Maravilhoso escreva na Wikipedia, sob Status de saída , especificamente o Shell e scripts . Ele explica que, enquanto um status de saída waitpid de um processo é um inteiro (int), os processos de shell recebem apenas os 8 bits inferiores. Ele também fala sobre o raciocínio '128 + n'. (Talvez a declaração da wikipedia sobre o ksh usando '256 + n' esteja incorreta, como a página do manual do ksh diz '128 + n ')
Examine o artigo da Wikipédia, pois ele explica as várias interpretações feitas por diferentes linguagens de programação e interfaces.
Espero que isso ajude.
(E sim, eu leio TODAS as páginas do manual, não é?)
Adendo:
travis-ci faz sugira para não use apt-get upgrade
(e por extensão, apt-get dist-upgrade
) nas máquinas virtuais. Instale o que você deseja, mas as VMs são geralmente bem abastecidas e atualizadas.
O uso de apt-get upgrade
pode ter contribuído para o apt-get receber SIGKILL . Sem mais informações sobre travis-ci , não podemos determinar exatamente o motivo. Mas, normalmente ... SIGKILL é usado quando você faz algo ruim, uso excessivo de recursos, alto uso de cpu e coisas do tipo ... de novo, não sabemos, não podemos dizer os logs que vimos. (Como um aparte, olhe para ulimit (na man page do bash), e setrlimit/getrlimit(2) e como seus diversos limites são tratados ... RLIMIT_CPU (ou -t ) parece apropriado aqui