Por que meu wget não morreu após a perda de conexão ssh?

13

Eu ssh ed para o meu servidor e corri wget -r -np zzz.aaa/bbb/ccc e ele começou a funcionar. Então minha conexão com a Internet (em minha casa) foi interrompida e me preocupei supondo que wget tenha sido hup ped porque a conexão ssh foi perdida e, portanto, o terminal morreu. Mas então eu ssh ed para o meu servidor percebeu que ainda estava em execução e colocando a saída em wget.log e baixar coisas. Alguém pode me explicar o que poderia ter acontecido aqui?

Isso é o que o ps me dá:

PID   %CPU %MEM    VSZ    RSS TTY     STAT START   TIME COMMAND
32283  0.6 29.4 179824 147088 ?       S    14:00   1:53 wget -r -np zzz.aaa/bbb/ccc

O que isso faz (ponto de interrogação) ? significa na coluna de tty ?

    
por yukashima huksay 20.01.2018 / 19:52

2 respostas

21

Programas (e scripts) podem escolher ignorar a maioria dos sinais, exceto alguns como KILL . O sinal HUP pode ser capturado e ignorado se o software assim desejar.

Isso é de src/main.c das fontes wget (versão 1.19.2):

/* Hangup signal handler.  When wget receives SIGHUP or SIGUSR1, it
   will proceed operation as usual, trying to write into a log file.
   If that is impossible, the output will be turned off.  */

Um pouco mais abaixo, o manipulador de sinal é instalado:

  /* Setup the signal handler to redirect output when hangup is
     received.  */
  if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
    signal(SIGHUP, redirect_output_signal);

Portanto, parece que wget não está ignorando o sinal HUP , mas opta por continuar o processamento com sua saída redirecionada para o arquivo de log.

Solicitado nos comentários: O significado do ? na coluna TTY da saída de ps na pergunta é que o processo wget não está mais associado a um terminal / TTY. O TTY foi embora quando a conexão SSH caiu.

    
por 20.01.2018 / 20:07
8

Simples : wget não aborta em SIGHUP . Ele faz em SIGTERM e SIGINT , embora.

Não há nada na página man , mas se você enviou SIGHUP para um processo wget , você terá isso no terminal:

# in a different terminal while wget is running (with PID 12345)
kill -HUP 12345
# in the wget terminal
SIGHUP received.
Redirecting output to 'wget-log'.
    
por 20.01.2018 / 20:07