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

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

disown연결을 끊은 후에도 작업을 계속 실행하려면 필요한지, 왜 필요한지 설명해 줄 수 있습니까?

제가 이 질문을 하는 이유는 제가 방문한 모든 웹사이트에서 사용하라고 나와 있지만 disownbg자체 bg로는 저에게 효과적이며 그 이유를 모르겠습니다.

아직 그 목적을 완전히 이해하지 못했기 때문입니까 , 아니면 명령의 기본 동작에 disown영향을 미치는 일부 설정이 있습니까 ?bg

이것이 내가 한 일입니다:

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

    tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
    
  • 작업이 일시 중지됨

  • 백그라운드에서 복원하여bg 1
  • SSH 서버에서 연결 끊기

그런 다음 FTP를 통해 파일 크기가 여전히 증가하고 있는지 확인했는데 .tar.gz, 그랬습니다.

답변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.from 을 사용해야 합니다 man bash:

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

관련 정보