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


13

나는 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?


을 실행하는 최신 시스템 logind에서 기본 동작은 logind사용자가 로그 아웃 할 때 사용자에게 속한 모든 프로세스를 강제 종료 (SIGTERM)하는 것입니다. 따라서이 동작은 시스템마다 다릅니다.
Daniel Pryden

@
Dan

2
Ubuntu 16.04는 systemd / logind 시스템이지만 Ubuntu 기본 logind.conf는 명시 적으로 설정합니다 KillUserProcesses=no.
Daniel Pryden

답변:


21

프로그램 (및 스크립트)은를 제외하고 대부분의 신호를 무시하도록 선택할 수 있습니다 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


1
의 의미를 추가하면 도움이 될 것이라고 생각합니다. tty.
yukashima huksay 2018 년

예, 어려운 방법으로 배웠습니다. ssh가 떨어질 때 모든 프로세스가 죽는 것은 아닙니다. 이유를 정확히 아는 것이 좋습니다.
Doug

2
또는 스크린 을 사용하는 습관을 들이고 HUP 는 사용 하지 마십시오.
하퍼-복원 모니카

8

단순 : 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'.

1
감사. 프로세스에 kill -HUP pid보낼 SIGHUP수있는 방법을 보여주는 명령을 추가하는 것이 더 좋습니다 .
yukashima huksay 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.