SSH接続が切断された後でも私のwgetが死なないのはなぜですか?

SSH接続が切断された後でも私のwgetが死なないのはなぜですか?

ssh私のサーバーを編集して実行すると、動作がwget -r -np zzz.aaa/bbb/ccc開始されました。その後、自宅でインターネット接続が中断され、接続が切断されてpedが発生し、端末が停止したと仮定してwget心配しました。ところで、私のサーバーにログインして、サーバーがまだ実行中であることに気づき、出力を入れてコンテンツをダウンロードしました。誰かがここで何が起こっているのか私に説明できますか?hupsshsshwget.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

答え1

プログラム(およびスクリプト)は、一部の信号を除くほとんどの信号を無視するように選択できますKILLHUPソフトウェアは、必要に応じて信号を捕捉して無視できます。

これはsrc/main.cソースwget(バージョン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似ていないと思います。無視するsignalHUPですが、処理を続行することを選択し、出力をログファイルにリダイレクトします。


コメントから要求された:?質問の出力列の意味は、プロセスが端末/ TTYに関連付けられなくなったことです。 SSH 接続が切断されると、TTY は消えます。TTYpswget

答え2

シンプルwget中断されませんSIGHUP。ただし、この機能はSIGTERMおよびで機能しますSIGINT

ページには何もありませんが、プロセスにman送信すると、端末に次のものが表示されます。SIGHUPwget

# 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'.

関連情報