Ich ssh ed zu meinem Server und führte wget -r -np zzz.aaa/bbb/ccc aus und es fing an zu arbeiten. Dann wurde meine Internetverbindung (bei mir zu Hause) unterbrochen und ich machte mir Sorgen, weil ich annahm, dass wget war hup ped, weil der ssh Die Verbindung ging verloren und daher war das Terminal gestorben. Aber dann ssh ed an meinen Server und stellte fest, dass er noch lief und die Ausgabe in wget.log ablegte und Sachen herunterladen. Kann mir bitte jemand erklären, was hier passiert sein könnte?
Das ist was ps gibt mir:
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
Was es tut (Fragezeichen) ? bedeuten in der Spalte von tty ?
Akzeptierte Antwort:
Programme (und Skripte) können die meisten Signale ignorieren, mit Ausnahme einiger weniger wie KILL . Das HUP Signal kann abgefangen und ignoriert werden, wenn die Software dies wünscht.
Dies ist von src/main.c des wget Quellen (Version 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. */
Etwas weiter unten ist der Signalhandler installiert:
/* Setup the signal handler to redirect output when hangup is
received. */
if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
signal(SIGHUP, redirect_output_signal);
Es sieht also wie wget aus nicht ignoriert das HUP Signal, aber es entscheidet sich dafür, die Verarbeitung fortzusetzen, wobei die Ausgabe in die Protokolldatei umgeleitet wird.
In Kommentaren erbeten:Die Bedeutung des ? im TTY Spalte der Ausgabe von ps in der frage steht, dass die wget Prozess ist nicht mehr mit einem Terminal/TTY verbunden. Das TTY ging weg, als die SSH-Verbindung unterbrochen wurde.