Por que é 'sudo pkill -HUP -f “nginx: processo mestre”' retornando código 129 e nenhuma saída

5

Estou tentando acionar um recarregamento do processo mestre do Nginx usando pkill e sudo .

O servidor recarrega bem, mas eu estava curioso para saber se o comando sudo pkill -HUP -f "nginx: master process" retorna o código 129?

# Running as root
$ pkill -HUP -f "nginx: master process"
$ echo $?

# Output is as expected:
0

# Running as a user (sudo is set to not prompt for a password)
% sudo pkill -HUP -f "nginx: master process
% echo $?

# Output is weird (considering sudo should be passing along the return
#                  code of the command it is executing):
129

Funcionando no Ubuntu 12.04.1 LTS rodando no EC2 ... surpreendentemente, o Ubuntu 12.04.1 LTS rodando em um computador físico (não instalado usando imagens de nuvem) roda bem.

    
por iserko 17.08.2012 / 15:27

2 respostas

5

Normalmente, quando o shell retorna um código de status acima de 128, isso significa que o processo foi morto por um sinal. Subtraia 128 para obter o número do sinal. Seu comando kill foi morto pelo sinal 1, que é o HUP.

pkill cuida para nunca se matar. Mas correspondeu a seu pai, o processo sudo .

Existem várias maneiras de evitar isso:

  • Use pkill -x para considerar apenas correspondências exatas e não substrings (recomendado, se possível, essa é a melhor maneira de evitar correspondências espúrias).
  • Não use a opção -f .
  • (Último recurso) Escreva um padrão que não corresponda a si próprio, por exemplo "[n]ginx: master process" .
por 17.08.2012 / 15:47
1

sudo retorna 129 porque pkill está enviando o sinal HUP para sudo . Isso ocorre porque a linha de comando de sudo corresponde à sequência que você forneceu a pkill with -f . Um processo terminado por um sinal sai com o código 128 + o número do sinal. HUP é o número de sinal 1, portanto, o código de saída 129.

    
por 17.08.2012 / 15:45