[unix] ssh 연결이 끊긴 후에 왜 wget이 죽지 않았습니까?

나는 ssh내 서버에 ed와 실행 wget -r -np zzz.aaa/bbb/ccc하고 작동하기 시작했다. 그런 다음 (내 집에서) 내 인터넷 연결이 중단했고 나는이 가정 걱정있어 wget되었습니다 hup때문에 PED ssh연결이 끊어졌습니다 때문에 터미널이 사망했다. 그러나 나는 ssh서버에 여전히 실행 중이며 출력을 넣고 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신호가 잡힐와 소프트웨어가 그렇게하고자하는 경우 무시할 수 있습니다.

이것은 소스 에서 온 것 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되지 무시HUP 신호를하지만 로그 파일로 재 출력과 처리를 계속하도록 선택합니다.


의견으로 요청 : 질문 의 출력 열 ?에서 의 의미 는 프로세스가 더 이상 터미널 / TTY와 관련이 없다는 것입니다. SSH 연결이 끊어지면 TTY가 사라졌습니다.TTYpswget


답변

단순 : wget중단하지 않습니다 SIGHUP. 그것은에서 수행 SIGTERM하고 SIGINT있지만,.

거기에 아무것도 man페이지 그러나 당신이 보낸 경우 SIGHUPA와 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'.


답변