Suponha que gedit
seja o programa que você deseja executar desanexado (também conhecido como "deserdado", "desembaraçado", "desacoplado"). Existem diferentes maneiras, dependendo do que você quer fazer exatamente:
Programa já em execução
Disown:
disown -h
é o caminho a percorrer se você quiser fazer isso com um programa já em execução (ou seja, se você esqueceu de nohup
it). Você primeiro tem que pará-lo usando Ctrl + Z . Então você pode colocar no brackground usando bg [jobId]
(por exemplo, bg 1
). Você obtém uma lista de tarefas em execução com o jobId usando jobs
. Depois disso, você pode dissociá-lo do terminal usando disown -h %[jobId]
. Exemplo de sessão de terminal:
$ gedit
^Z
[1]+ Stopped gedit
$ jobs
[1]+ Stopped gedit
$ bg 1
[1]+ gedit &
$ disown -h %1
$ exit
Programa ainda não iniciado
nohup
nohup
nem sempre está presente em todas as máquinas. Se você sabe que quer dissociar de antemão, você usaria:
nohup gedit &
Talvez você queira redirecionar também a saída do shell e seu programa seja uma pseudo-fonte de entrada, portanto: nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Você gostaria de redirecionar a saída para não ficar incomodado com ela ou usá-la posteriormente. A entrada nula pode ajudar a prevenir hickups em ssh e assim por diante.
Subshell:
Você pode conseguir um efeito semelhante por
$ (geany >/dev/null 2>&1 &)
Os colchetes abrem um novo subshell para executar o gedit. O >/dev/null 2>&1
redireciona a saída do shell para lugar nenhum (suprimindo a saída). E o &
no final coloca o processo em segundo plano.
Multiplexação de terminal
Também multiplexação terminal usando tela ou byobu . Você basicamente executa o programa em um terminal próprio. Eu realmente posso recomendar byobu por outras razões também. Abaixo está uma lista de atalhos de boybu que podem ser úteis para seus primeiros passos:
Útil:
-
F2 Crie uma nova janela
-
F3 Mover para a janela seguinte
-
F4 Mover para a janela anterior
-
F6 Desanexe da sessão e faça o logout
-
Shift-F6 Desanexe da sessão, mas não efetue logout
-
F7 Digite o modo de rolagem / pesquisa
-
Ctrl-F5 Reconecta qualquer soquete ou agente SSH / GPG
Menos útil:
-
Shift-F2 Dividir a tela horizontalmente
-
Ctrl-F2 Dividir a tela verticalmente
-
Shift-F3 Move o foco para a próxima divisão
-
Shift-F4 Move o foco para a divisão anterior
-
Shift-F5 Recolher todos os grupos
-
F5 Atualiza todas as notificações de status
-
F8 Renomeie a janela atual
-
F9 Lançar o menu de configuração do Byobu
-
F12 Chave de Escape da Tela GNU
-
Alt-Pageup Rola de volta pelo histórico desta janela
-
Alt-Pagedown Navegue pelo histórico desta janela
-
Ctrl-a -! Ative ou desative todas as combinações de teclas do Byobu
O daemon 'at' e outros
at
é uma pequena e útil ferramenta para executar um comando em um horário agendado. Pode ser "mal utilizado" separar um comando do shell:
echo './myprogram myoption1 myoption2' | at now
Além disso, você pode pesquisar setsid
e start-stop-daemon
, mas os outros métodos devem ser suficientes.