Dlaczego mój wget nie umarł po utracie połączenia ssh?

13

I sshed do mojego serwera i pobiegł wget -r -np zzz.aaa/bbb/ccci zaczęło działać. Potem moje połączenie internetowe (w moim domu) zostało przerwane i zaczęłam się martwić, zakładając, że wgetzostało to przerwane, hupponieważ sshpołączenie zostało utracone, a zatem terminal umarł. Ale potem zdałem sshsobie sprawę, że mój serwer nadal działa i wkłada dane wyjściowe wget.logi pobiera pliki. Czy ktoś może mi wyjaśnić, co mogło się tu stać?

Oto, co psdaje mi:

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

Co to znaczy (znak zapytania) ?w kolumnie tty?

yukashima huksay
źródło
Należy pamiętać, że w działającym nowoczesnym systemie loginddomyślnym zachowaniem logindjest zabijanie (SIGTERM) wszystkich procesów należących do użytkownika po wylogowaniu. To zachowanie jest specyficzne dla systemu.
Daniel Pryden
@ Dan Mój system to ubuntu 16.04
yukashima huksay
2
Wierzę, że Ubuntu 16.04 jest systemem systemd / logind, ale domyślny logind.conf Ubuntu wyraźnie to ustawia KillUserProcesses=no.
Daniel Pryden

Odpowiedzi:

21

Programy (i skrypty) mogą ignorować większość sygnałów, z wyjątkiem kilku podobnych KILL. HUPSygnał może zostać złapany i ignorowane jeśli oprogramowanie tak pragnie.

To jest z src/main.cze wgetźródeł (wersja 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.  */

Nieco dalej zainstalowany jest moduł obsługi sygnałów:

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

Wygląda więc na to wgetnie ignoruje ten HUPsygnał, ale zdecyduje się kontynuować przetwarzanie z przekierowany do pliku dziennika.


Żądane w komentarzach: Znaczenie ?w TTYkolumnie danych wyjściowych z pspytania jest takie, że wgetproces nie jest już powiązany z terminalem / TTY. TTY odszedł, gdy połączenie SSH przestało działać.

Kusalananda
źródło
1
Myślę, że przydałoby się dodać znaczenie? w tty.
yukashima huksay
Tak, nauczyłem się tego na własnej skórze. Nie wszystkie procesy giną, gdy spada ssh. Dobrze wiedzieć dokładnie, dlaczego.
Doug
2
Alternatywnie, przyzwyczaj się do korzystania z ekranu i nigdy nie HUP.
Harfiarz - Przywróć Monikę
8

Proste : wgetnie przerywa SIGHUP. Czyni on SIGTERMi SIGINT, choć.

Na stronie nie ma nic, manale jeśli wysłałeś SIGHUPdo wgetprocesu, otrzymasz to w terminalu:

# 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'.
Hauke ​​Laging
źródło
1
Dzięki. Myślę, że lepiej, jeśli dodasz również kill -HUP pidpolecenie, aby pokazać, jak można wysłać SIGHUPproces.
yukashima huksay