세션이 "백그라운드에서 실행 중"이라는 것은 정확히 무엇을 의미합니까?

세션이 "백그라운드에서 실행 중"이라는 것은 정확히 무엇을 의미합니까?

현재 내 연구실에서 사용하는 서버에 연결하기 위해 SSH 클라이언트를 사용하고 있습니다. "백그라운드에서 실행되는 세션"의 개념에 관해 질문이 있었습니다. 이 커뮤니티에 올라온 질문을 살펴봤습니다(백그라운드 프로세스란 무엇입니까?) 그런데 제가 궁금한 것과는 조금 다른 것 같아요.

우리가 작업 중인 서버(서버인지 인터넷 연결인지 잘 모르겠습니다)에 몇 가지 문제가 있었습니다. 예를 들어 밤새 프로세스를 실행한 채로 두고 아침에 오면 셸 세션의 연결이 끊어집니다.

누군가가 제안한 한 가지 해결책은 프로그램을 사용하는 것입니다.티먹스이 문제를 회피하기 위해. 프로그램이 주장하는 것은 서버 연결이 끊어지더라도 프로세스가 방해받지 않도록 세션을 분리하는 것입니다.

프로세스가 이와 같이 "백그라운드에서 실행"된다는 것이 정확히 무엇을 의미하는지 궁금합니다. 위에 링크한 질문과 같은건가요? 제가 잘못 이해하고 있는 걸까요? 또한 세션을 "연결 또는 분리"한다는 것은 무엇을 의미합니까?

쉘 연결이 끊어졌을 때 세션이 어떻게 실행될 수 있는지 이해하지 못한다는 사실 때문에 혼란이 발생한 것 같습니다.

감사해요!

답변1

그런 개념이 없어서 개념이 어려워요. 프로세스 그룹배경/전경에 있을 수 있습니다. 해당 개념은 적용되지 않습니다.세션, 운영 체제가 세션을 호출하는 것과 tmux세션을 호출하는 것은 매우 다른 두 가지입니다.

tmux수행하는 작업은 하나 이상의 의사 터미널을 생성하는 것입니다. 이 터미널은 내부에서 실행되는 프로그램이 제어 tmux터미널(및 시작 시 표준 입력, 출력 및 오류)로 간주됩니다. 그것멀티플렉스해당 내부 터미널을 단일밖의터미널은 SSH를 통해 로그인할 때 컴퓨터의 SSH 서버에 의해 설정되는 의사 터미널이 됩니다.

두 가지 프로세스가 있습니다 tmux.섬기는 사람모든 내부 의사 터미널의 백엔드(즉, 더 이상 유행하지 않는 용어를 사용하면 "마스터" 측)에 연결됩니다.고객이는 해당 서버와 실현된 외부 터미널 사이의 중개자입니다. 실제로 여러 클라이언트가 있을 수 있지만 요점이 바뀌지 않으므로 복잡하다는 점은 여기서 얼버무릴 수 있습니다.

그만큼섬기는 사람프로세스는 내부 의사 터미널이 하나 이상 남아 있는 한 존재합니다. 의사 터미널을 컬렉션으로 그룹화합니다 tmux.세션. 이를 운영 체제가 세션(프로세스 그룹 모음 및 선택적으로 제어 터미널)이라고 부르는 것과 혼동하지 마십시오.세션SSH를 통해(원격 SSH 서버와 로컬 SSH 클라이언트 간) "세션"은 다양한 것을 나타낼 수 있습니다. tmux여기서는 " ", "SSH" 및 "운영 체제"를 사용하여 다양하게 한정하고 있습니다 .

그만큼고객프로세스는 일시적이며 사라집니다.분리세션 및 서버 에서 tmux— SSH 연결이 끊어졌습니다. SSH로 새로 로그인하면새로운그 클라이언트다시 부착tmux서버에 의해 관리되는 세션 에 연결 되고 해당 새 클라이언트는 tmux서버의 사용자 인터페이스를 실현합니다.창문들세션 및 상태 표시줄 에서 tmux— 새 SSH 로그인 세션을 위한 새로운 의사 터미널로 이동합니다. 클라이언트는 tmux한 번에 하나의 세션, 즉 현재 연결된 세션을 인식합니다.

클라이언트 프로세스는 운영 체제가 세션이라고 부르는 것의 일부입니다.밖의SSH 로그인을 위해 SSH 서버에서 생성된 의사 터미널입니다. 해당 운영 체제 세션의 수명이 적용되고 SSH 세션의 수명이 적용되며 백그라운드 또는 포그라운드 프로세스 그룹에 있을 수 있습니다.그 외부 터미널의. (따라서) 다음의 적용을 받습니다.쉘 작업 제어해당 SSH 세션의 로그인 셸.

서버 프로세스는 외부 터미널 및 운영 체제 세션과 완전히 분리되어 있습니다. 그것은 그들의 생애에 영향을 받지 않습니다. 그것은안에는 없어백그라운드 또는 포그라운드 프로세스 그룹. 그 수명은 오로지 다음의 지속적인 존재 여부에 따라 결정됩니다.안의클라이언트 에게 I/O를 제공하는 터미널입니다 tmux.

있다안의그리고밖의터미널. 있다첨부된그리고떨어져 있는 tmux서버 에 연결하고 서버에서 분리하는 클라이언트의 확장에 의한 세션 tmux. 있다활동적인그리고비활성세션 내의 창 tmux. 쉘 작업 제어 개념배경그리고전경관여하지 않습니다.

답변2

Unix 프로세스는 두 가지 주요 방식으로 "백그라운드에서 실행 중"이라고 할 수 있습니다.

  1. 여전히 셸과 같은 다른 프로세스의 부모입니다. &Bourne 쉘에서 연산자를 사용하면 다음과 같은 일이 발생합니다 .

    sleep 10 &
    

    sleep프로세스는 셸에 의해 백그라운드에서 실행되므로 계속 실행되지만 셸 프롬프트와 상호 작용하고 다른 명령을 실행할 수 있습니다. 이와 같이 백그라운드에서 실행 중인 프로그램이 입력을 읽으려고 하면 신호와 함께 중지됩니다 SIGTTIN.

    그러나 중요한 것은 그것이 시작된 쉘 프로세스에 여전히 속하고 여전히 tty(실행 중인 터미널)에 연결되어 있으며, tty가 닫히면(ssh 연결이 끊어지고 쉘이 종료됨) 으로 프로세스가 종료됩니다 SIGHUP.

    이를 쉘 작업 제어라고 합니다. 프로세스는 &또는 bg또는 등을 사용하여 백그라운드에 배치되고 등을 사용하여 ^Z전경으로 다시 가져올 수 있습니다. 실제로는 쉘 종료 및 터미널 종료에 대해 안전해야 하는 장기 실행 프로세스가 아니라 다른 명령을 작업하는 동안 일시적으로 하나의 명령을 백그라운드로 수행하기 위한 것입니다.fgjobs

  2. 데몬 프로세스. 이는 상위 프로세스 및 해당 tty에서 완전히 분리되는 프로세스입니다. 여기에는 새로운 프로세스 그룹과 세션 ID가 있고 그 부모는 PID 1입니다(일반적으로 최신 Linux에서는 해당 역할을 인계했다고 init생각하지만 ). systemd데몬 프로세스는 쉘의 부모가 아니며 tty에 연결되지 않기 때문에 쉘이 종료되거나 tty가 닫혀도 종료되지 않습니다. 시스템이나 사용자가 명시적으로 종료해야 합니다. 대부분의 Unix 시스템에는 모든 종류의 작업을 수행하기 위한 많은 기본 데몬이 함께 제공됩니다.

이것은 광범위한 설명이며 내가 언급하지 않은 쉘 작업 제어 및 데몬 프로세스에 대한 세부 정보가 많이 있습니다.

(1) 신호를 무시하여 tty가 닫힐 때 종료되지 않도록 nohup프로그램을 실행할 수 있는 프로그램이 있습니다 . SIGHUP이것이 진정한 데몬이 되는 것은 아니지만 출력만 하고 입력이 전혀 필요하지 않은 간단한 작업에 적합합니다.

tmux는 데몬으로 실행되지만 그 안에서 다른 프로그램(셸 또는 기타 모든 것)을 실행할 수 있게 해주는 프로그램입니다. tmux는 nohup전체 화면 프로그램과 입력과 출력이 모두 필요한 프로그램을 실행할 수 있는 것보다 훨씬 더 정교합니다 . 데몬이기 때문에 tty가 사라져도(예: SSH 연결이 끊어지는 경우) 종료되지 않습니다.

tmux에서 "연결됨"은 tmux가 터미널 내부에서 실행 중인 하나 이상의 프로세스를 표시하고 있음을 의미합니다. 해당 터미널에서 tmux를 "분리"하고 나중에 다른 터미널에 다시 "연결"할 수 있습니다. SSH 연결이 끊어지거나 종료되면 분리가 자동으로 발생합니다. 따라서 터미널과 SSH를 닫은 다음 나중에 다른 터미널에서 연결하고 tmux를 연결하면 모든 것이 그대로 유지됩니다.

관련 정보