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

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

현재 내 연구실에서 사용하는 서버에 연결하기 위해 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다음 사용 fg하고 나열 jobs할 수 있습니다 . 실제 목적은 쉘이 종료되고 터미널이 사라지는 것으로부터 안전해야 하는 장기 실행 프로세스가 아닌 다른 명령을 처리하는 동안 일시적으로 백그라운드에 명령을 배치하는 것입니다.

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

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

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

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

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

관련 정보