Processos Bash - reconecta processo iniciado em segundo plano

3

Existe uma maneira de reconectar a um terminal específico um processo iniciado a partir do terminal com & amp ;? Por exemplo, eu iniciei o Kate por:

kate &

e agora quero anexar o processo a um determinado terminal.

    
por Mauren 12.09.2013 / 21:59

2 respostas

7

Existem dois problemas aqui:

1) Morte pelo HUP e evitando isso:

Se você iniciar um programa em um shell e terminar esse shell, todos os processos filhos serão eliminados. Isso inclui programas sendo executados no segundo plano. (Aqueles que você começa com um & no final do comando, como kate & em seu exemplo, mas também processa o que você suspendeu com controle z e depois bg ).

Ambos irão morrer quando você fechar o shell. * 1

Você pode contornar isso por disown ing o programa em segundo plano. Em seguida, ele continuará sendo executado, mas você não poderá mais recuperá-lo no primeiro plano de um shell.

Você pode usar nohup (por exemplo, nohup kate & ) para manter a saída do programa em um arquivo. Mas a recolocação total em uma concha também não é mais possível.


2) Emuladores de terminal.

Você também pode iniciar um programa que emula um terminal por conta própria e que é especialmente criado para que você possa se reconectar a ele. screen e tmux são dois exemplos disso.

Exemplo de uso da tela:

  • faça login ou ssh para hospedar.
  • screen (tela inicial. Por padrão, isso inicia um novo shell).
  • kate (inicia o kate).
  • Controle A D (Desconecta a tela, você estará de volta ao mesmo prompt que você tinha quando logou pela primeira vez).
  • logout

Caminhe até outro computador ou volte horas depois. (ou ambos :))  - log in ou ssh para o host.  - screen -r (Recoloque a tela. Agora você está de volta em um shell onde você está executando o kate.

Comandos úteis para a tela:

tela -d
Desconecte uma tela de fora do programa de tela.
Use o Controle A D para desconectar da tela interna.

tela -r Reconectar-se à tela (por exemplo, de um local diferente)

tela -dr
Se houver uma tela anexada, primeiro desconecte-a. Em seguida, anexe-o localmente.
Útil de você se esqueceu de separá-lo no escritório e faça o login de casa;)

tela -x
Anexe a uma tela em execução sem fechar a outra sessão. Útil para depuração compartilhada, sessão de ajuda etc. etc.

* 1 : Editar: Quando respondi isso, presumi que todos os shells sempre enviam um sigHUP para todos os seus filhos. No entanto, esta é uma opção e, dependendo das conchas, pode ser configurável. Em alguns casos, não é mais o padrão.

Exemplo1: No bash você pode configurar esta opção através do comando buildin shopt . ( shopt -s huponexit ).

Exemplo2: Com o zsh, você deseja setopt HUP .

    
por 12.09.2013 / 22:01
6

fg traz algo do plano de fundo para o primeiro plano no terminal atual.

    
por 12.09.2013 / 22:01