私は自分のサーバーにssh
edして実行しましたwget -r -np zzz.aaa/bbb/ccc
そしてそれは働き始めました。次に、私の自宅でのインターネット接続が中断され、wget
接続が失われたため端末が停止したため、hup
がssh
pedされたと想定して心配になりました。しかし、サーバーにssh
edしたところ、サーバーがまだ実行中であり、出力をwget.log
とダウンロードのもの。誰かがここで何が起こったのか説明してくれませんか?
これはps
が私に与えるものです:
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
機能(疑問符)?
はtty
の列の意味ですか?
プログラム(およびスクリプト)は、KILL
のようないくつかを除いて、ほとんどの信号を無視することを選択できます。ソフトウェアが望めば、HUP
シグナルをキャッチして無視できます。
これはwget
ソースのsrc/main.c
からのものです(バージョン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. */
少し下にシグナルハンドラがインストールされています:
/* Setup the signal handler to redirect output when hangup is
received. */
if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
signal(SIGHUP, redirect_output_signal);
したがって、wget
はignoringHUP
信号ではないように見えますが、出力をログファイルにリダイレクトして処理を続行することを選択しています。
コメントでリクエスト:質問のTTY
からの出力のps
列の?
の意味は、wget
プロセスが関連付けられなくなったことです。端末/ TTY付き。 SSH接続がダウンしたとき、TTYはなくなりました。
シンプル:wget
はSIGHUP
で中止されません。ただし、SIGTERM
とSIGINT
には適用されます。
man
ページには何もありませんが、SIGHUP
をwget
プロセスに送信すると、ターミナルで次のようになります。
# 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'.