I ssh
ed do mojego serwera i pobiegł wget -r -np zzz.aaa/bbb/ccc
i zaczęło działać. Potem moje połączenie internetowe (w moim domu) zostało przerwane i zaczęłam się martwić, zakładając, że wget
zostało to przerwane, hup
ponieważ ssh
połączenie zostało utracone, a zatem terminal umarł. Ale potem zdałem ssh
sobie sprawę, że mój serwer nadal działa i wkłada dane wyjściowe wget.log
i pobiera pliki. Czy ktoś może mi wyjaśnić, co mogło się tu stać?
Oto, co ps
daje 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
?
logind
domyślnym zachowaniemlogind
jest zabijanie (SIGTERM) wszystkich procesów należących do użytkownika po wylogowaniu. To zachowanie jest specyficzne dla systemu.KillUserProcesses=no
.Odpowiedzi:
Programy (i skrypty) mogą ignorować większość sygnałów, z wyjątkiem kilku podobnych
KILL
.HUP
Sygnał może zostać złapany i ignorowane jeśli oprogramowanie tak pragnie.To jest z
src/main.c
zewget
źródeł (wersja 1.19.2):Nieco dalej zainstalowany jest moduł obsługi sygnałów:
Wygląda więc na to
wget
nie ignoruje tenHUP
sygnał, ale zdecyduje się kontynuować przetwarzanie z przekierowany do pliku dziennika.Żądane w komentarzach: Znaczenie
?
wTTY
kolumnie danych wyjściowych zps
pytania jest takie, żewget
proces nie jest już powiązany z terminalem / TTY. TTY odszedł, gdy połączenie SSH przestało działać.źródło
Proste :
wget
nie przerywaSIGHUP
. Czyni onSIGTERM
iSIGINT
, choć.Na stronie nie ma nic,
man
ale jeśli wysłałeśSIGHUP
dowget
procesu, otrzymasz to w terminalu:źródło
kill -HUP pid
polecenie, aby pokazać, jak można wysłaćSIGHUP
proces.