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
.