O que exatamente significa uma sessão "executando em segundo plano"?

O que exatamente significa uma sessão "executando em segundo plano"?

Atualmente estou usando um cliente SSH para conectar-me a um servidor que meu laboratório está usando. Eu tinha uma dúvida sobre o conceito de "sessão executada em segundo plano". Dei uma olhada em uma pergunta nesta comunidade (o que é um processo em segundo plano?), mas sinto que é um pouco diferente do que estou pensando.

O servidor com o qual estamos trabalhando (não tenho certeza se é o servidor ou a conexão com a Internet) está apresentando alguns problemas, como quando deixamos um processo rodando durante a noite e voltamos pela manhã, as sessões do shell são desconectadas.

Uma solução que alguém sugeriu é usar o programaTmuxpara contornar esse problema. O que o programa afirma fazer é desconectar uma sessão para que, mesmo que o servidor seja desconectado, nosso processo não seja perturbado.

Eu estava pensando: o que exatamente significa um processo estar "executando em segundo plano" como este? É igual à pergunta que coloquei no link acima e simplesmente não estou entendendo corretamente? Além disso, o que significa “anexar ou desanexar” uma sessão?

Acho que minha confusão vem do fato de não entender como uma sessão pode estar em execução quando o shell é desconectado.

Obrigado!

Responder1

Você está tendo dificuldade com o conceito porque não existe tal conceito. Grupos de processospode estar em segundo plano/primeiro plano. O conceito não se aplica asessões, nem o que o sistema operacional chama de sessões nem o que tmuxchama de sessões, que são duas coisas muito diferentes.

O tmuxque faz é criar um ou mais pseudoterminais, que os programas em execução tmuxvêem como seus terminais de controle (e entradas, saídas e erros padrão, para começar). Istomultiplexesesses terminais internos em um únicoexteriorterminal, que será o pseudoterminal configurado pelo servidor SSH em sua máquina quando você efetuou login via SSH.

Existem dois tmuxprocessos, um de longa duraçãoservidorque se conecta às extremidades traseiras (ou seja, lados "mestres", para usar uma terminologia que não está mais na moda) de todos esses pseudoterminais internos, e umclienteesse é o intermediário entre esse servidor e o terminal externo realizado. Na verdade, podem haver vários clientes, mas essa é uma complexidade que podemos encobrir aqui, pois não muda a questão.

Oservidoro processo existe enquanto houver pelo menos um pseudoterminal interno restante. Ele agrupa os pseudoterminais em coleções, que são o que tmuxchamasessões. Isso não deve ser confundido com o que seu sistema operacional chama de sessão (uma coleção de grupos de processos e, opcionalmente, um terminal de controle) ou umsessãopor SSH (entre o servidor SSH remoto e seu cliente SSH local). "sessão" pode denotar muitas coisas diferentes. Observe que estou qualificando-o de várias maneiras com " tmux", "SSH" e "sistema operacional" aqui.

Oclienteo processo é transitório e desaparece -destacandoda tmuxsessão e do servidor — com perda da conexão SSH. Ao fazer login novamente com SSH, você cria umnovocliente quereconectapara (uma tmuxsessão gerenciada pelo) servidor, e esse novo cliente realiza a interface do usuário do tmuxservidor - todos osjanelasna tmuxsessão e na linha de status - no novo pseudoterminal para sua nova sessão de login SSH. Um cliente realiza uma tmuxsessão de cada vez, aquela à qual está atualmente vinculado.

O processo cliente faz parte do que o sistema operacional chama de sessão, a sessão que é controlada peloexteriorpseudoterminal criado pelo seu servidor SSH para login SSH. Ele está sujeito ao tempo de vida dessa sessão do sistema operacional, que por sua vez está sujeito ao tempo de vida da sessão SSH, e pode estar no grupo de processos em segundo plano ou em primeiro planodaquele terminal externo. Está (assim) sujeito acontrole de trabalho shelldo shell de login dessa sessão SSH.

O processo do servidor é totalmente separado do terminal externo e de suas sessões do sistema operacional. Não está sujeito ao tempo de vida deles. Isso énão emseus grupos de processos de segundo plano ou de primeiro plano. Sua vida útil é determinada unicamente pela existência continuada deinternoterminais, cujas E/S ele atende aos tmuxclientes.

internoeexteriorterminais. Háapegadoeseparado tmuxsessões, por extensão de clientes conectando-se e desconectando-se de tmuxservidores. Háativoeinativojanelas dentro de uma tmuxsessão. O conceito de controle de trabalho shell defundoeprimeiro planonão está envolvido.

Responder2

Pode-se dizer que os processos Unix estão "executando em segundo plano" de duas maneiras principais:

  1. Ainda criado por outro processo como o shell. Isto é o que acontece se você usar o &operador em shells Bourne:

    sleep 10 &
    

    Este sleepprocesso será executado em segundo plano pelo shell, portanto continuará em execução, mas você poderá interagir com o prompt do shell e executar outros comandos. Se um programa rodando em segundo plano como este tentar ler qualquer entrada, ele será interrompido com o SIGTTINsinal.

    Porém, o que é mais importante, ele ainda pertence ao processo shell onde foi iniciado e ainda está conectado ao tty (o terminal onde está sendo executado), e se o tty estiver fechado (a conexão ssh cai e o shell sai), o o processo será eliminado com SIGHUP.

    Isso é chamado de controle de tarefa de shell - os processos podem ser colocados em segundo plano com &ou bgou ^Ze trazidos de volta para o primeiro plano com fge listados com jobse assim por diante. Na verdade, ele se destina a colocar temporariamente em segundo plano um comando enquanto você trabalha em outro, não para processos de longa execução que precisam ser protegidos contra a saída do shell e a saída do terminal.

  2. Um processo daemon. Este é um processo que se separa totalmente do processo pai e de seus ttys. Ele tem um novo grupo de processos e ID de sessão e seu pai é PID 1 (normalmente init, embora no Linux moderno eu acredite que systemdtenha assumido essa função). Como um processo daemon não é pai do shell e não está anexado a um tty, ele não é eliminado quando o shell sai ou o tty é fechado. Ele deve ser explicitamente eliminado pelo sistema ou pelo usuário. A maioria dos sistemas Unix vem com muitos daemons padrão para fazer todo tipo de coisa.

Esta é uma explicação ampla e há muitos detalhes sobre controle de tarefas shell e processos daemon que não mencionei.

Existe um programa chamado nohupque pode fazer um programa rodar com (1) ignorar o SIGHUPsinal para que não saia quando o tty fechar. Isso não o torna um daemon verdadeiro, mas é bom para trabalhos simples que apenas geram saída e nunca requerem nenhuma entrada.

tmux é um programa que roda como um daemon, mas permite executar outros programas (shells ou qualquer outra coisa) dentro dele. tmux é muito mais sofisticado do que nohup- você pode executar programas em tela cheia e programas que requerem entrada e saída. Por ser um daemon, ele não é eliminado quando o tty desaparece (por exemplo, quando a conexão ssh cai).

No tmux, "anexado" significa que o tmux está mostrando um ou mais processos em execução dentro dele em um terminal. Você pode "desconectar" o tmux desse terminal e depois "conectá-lo" novamente a um terminal diferente. A desconexão acontece automaticamente se a conexão ssh cair ou for interrompida. Assim, você pode fechar seu terminal e ssh, depois conectar-se a partir de um terminal diferente e anexar o tmux e tudo estará como estava.

informação relacionada