disown
연결을 끊은 후에도 작업을 계속 실행하려면 필요한지, 왜 필요한지 설명해 줄 수 있습니까?
제가 이 질문을 하는 이유는 제가 방문한 모든 웹사이트에서 사용하라고 나와 있지만 disown
그 bg
자체 bg
로는 저에게 효과적이며 그 이유를 모르겠습니다.
아직 그 목적을 완전히 이해하지 못했기 때문입니까 , 아니면 명령의 기본 동작에 disown
영향을 미치는 일부 설정이 있습니까 ?bg
이것이 내가 한 일입니다:
- SSH를 통해 CentOS 6 시스템에 연결
간단한 프로세스를 만들었습니다.
tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
작업이 일시 중지됨
- 백그라운드에서 복원하여
bg 1
- SSH 서버에서 연결 끊기
그런 다음 FTP를 통해 파일 크기가 여전히 증가하고 있는지 확인했는데 .tar.gz
, 그랬습니다.
답변1
백그라운드를 통해 실행 중인 프로세스는 bg
일반적으로 &
다음 두 가지 상황에서 종료됩니다.
- 쉘이 SIGHUP을 수신합니다.
- 그들은 더 이상 존재하지 않는 터미널에 쓰려고 합니다.
항목 # 1은 터미널을 닫을 때 범인입니다. 그러나 그것이 일어날지 여부는 다음에 달려 있습니다.어떻게터미널을 닫습니다. 다음 방법으로 끌 수 있습니다:
- 예를 들어 창 관리자에서 "X"를 클릭합니다.
exit
,logout
또는 CTRL+ 를 입력할 수 있습니다 D.
항목 #1을 사용하면 SIGHUP이 전송됩니다. #2 아니요.
간단히 말해서, 백그라운드 프로세스를 사용한 다음 bg
, 또는 +를 사용하여 로그아웃하면 프로세스가 종료되지 않습니다.exit
logout
CTRLD
답변2
터미널을 닫으면 해당 터미널을 사용하는 모든 프로세스( 출력 TTY
의 열 참조 ps -elf
)는 SIGHUP
프로세스가 수행하려는 작업에 따라 SIGHUP
. 클래식 UNIX(AIX, Solaris)에서는 이 신호가 발생하면 프로세스가 종료됩니다. 그렇기 때문에 disown
.from 을 사용해야 합니다 man bash
:
기본적으로 쉘은 SIGHUP을 수신한 후 종료됩니다. 대화형 셸은 종료하기 전에 실행 중이거나 중지된 모든 작업에 SIGHUP을 다시 보냅니다. 중지된 작업은 SIGHUP을 수신할 수 있도록 SIGCONT로 전송됩니다. 쉘이 특정 작업에 신호를 보내는 것을 방지하려면 disown 내장 명령(아래 SHELL BUILTIN 명령 참조)을 사용하여 작업 테이블에서 해당 작업을 제거하거나 disown -h를 사용하여 SIGHUP을 수신하지 않도록 표시해야 합니다.