연결을 끊은 후에도 계속 실행하려면 프로세스의 소유를 해제해야 합니까?

연결을 끊은 후에도 계속 실행하려면 프로세스의 소유를 해제해야 합니까?

disown연결을 끊은 후에도 작업을 계속 실행하려면 필요한지 여부와 이유를 누군가 설명해 주시겠습니까 ?

제가 방문한 모든 사이트는 사용하라고 되어 있지만 disown그 자체로 bgbg저에게 효과적이며 그 이유를 잘 모르겠습니다.

disown명령 의 기본 동작에 영향을 미치는 설정이 무엇인지 완전히 이해하지 못했기 때문입니까 bg?

내가 한 일은 다음과 같습니다.

  • SSH를 통해 CentOS 6 상자에 연결됨
  • 간단한 프로세스를 만들었습니다.

    tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
    
  • 작업을 일시 중단했습니다.

  • 다음을 통해 백그라운드에서 재개했습니다.bg 1
  • SSH 서버에서 연결이 끊어졌습니다.

.tar.gz그런 다음 FTP를 통해 파일 크기가 계속 커지고 있는지 확인했습니다 .

답변1

백그라운드 프로세스는 일반적으로 bg다음 &두 가지 시나리오에 따라 종료됩니다.

  1. 쉘이 SIGHUP을 수신합니다.
  2. 그들은 더 이상 존재하지 않는 터미널에 쓰려고 합니다.

항목 #1은 터미널을 닫을 때 주요 원인입니다. 그러나 그것이 발생하는지 여부는어떻게터미널을 닫습니다. 다음 방법으로 닫을 수 있습니다.

  1. 창 관리자에서 "X"를 클릭하는 것과 같은 것
  2. exit, logout또는 CTRL+를 입력할 수 있습니다 D.

항목 #1은 SIGHUP이 전송되는 항목입니다. #2는 그렇지 않습니다.

간단히 말해서, 를 사용하여 프로세스를 백그라운드로 설정한 다음 , 또는 +를 bg사용하여 로그아웃하면 프로세스가 종료되지 않습니다.exitlogoutCTRLD

답변2

터미널을 닫으면 이 터미널을 사용하는 모든 프로세스( 출력 TTY열 참조 ps -elf)는 SIGHUP. 에서 수행할 작업을 처리하는 것은 입니다 SIGHUP. 클래식 Unix(AIX, Solaris)에서는 이 신호가 발생하면 프로세스가 닫힙니다. 그렇기 때문에 를 사용해야 합니다 disown. 에서 man bash:

SIGHUP을 수신하면 기본적으로 셸이 종료됩니다. 종료하기 전에 대화형 셸은 실행 중이거나 중지된 모든 작업에 SIGHUP을 다시 보냅니다. 중지된 작업에는 SIGCONT가 전송되어 SIGHUP을 수신하는지 확인합니다. 쉘이 특정 작업에 신호를 보내는 것을 방지하려면 disown 내장 기능을 사용하여 작업 테이블에서 해당 작업을 제거하거나(아래 SHELL BUILTIN 명령 참조) disown -h를 사용하여 SIGHUP을 수신하지 않도록 표시해야 합니다.

관련 정보