Se a tarefa já está lançado, já é tarde demais *
para considerar soluções alternativas que inserir uma camada adicional entre a sua ssh
sessão e o shell de executar o comando, como screen
, tmux
, byobu
, nohup
e os gostos.
Se o seu suporte ao processo para ser colocado em segundo plano e, particularmente, não travar quando stdout
e stderr
são unwritable / fechado, você pode colocá-lo em segundo plano antes de sair com ControlZe bg
, em seguida, retirá-la da sua concha com o disown
builtin.
por exemplo:
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Como comentou Bob, na verdade existem várias maneiras imprudentes de reparar uma sessão tty no Linux. repty, retty , injcode e neercs . O mais avançado parece ser reptyr, mas você pode precisar de privilégios de root para permitir que o ptrace hackear seu processo.
disown
comando. Ele retornou: bash: AVISO: Excluir parou de trabalho 1 com o grupo processo de 24876. Agora meu trabalho está listado nops -all
, mas não parecem funcionar (uso da CPU é 0%)disown
comandobg
comando foi necessário na primeira parte da minha resposta. Editado.kill -CONT
o mesmo procedimento que o bg faria.Uma solução é usar a tela GNU . Você pode iniciar
screen
, executar seu comando e desconectar comC-a d
. Mais tarde, para reconectar, façascreen -r
e você estará de volta à sua sessão anterior.Outros benefícios da tela são o gerenciamento de janelas (para que você possa alternar para outros shells enquanto o comando está em execução, sem precisar de uma nova conexão SSH), e permite que o comando permaneça em primeiro plano, seja na sessão atual ou posterior.
Editar: Conforme observado nos comentários, isso só funcionará se você se lembrar de iniciar
screen
antes de executar o comando. Se o comando já estiver em execução, você precisará da solução do @ jlliagre.fonte
tmux
é outro programa comoscreen
esse que permite que você tenha uma sessão remota que não esteja vinculada à sua conexão SSH atual.screen
.screen
outmux
.)Uma das maneiras "padrão" de fazer isso é usar o
nohup
comando incluído emcoreutils
:Mas o comando redirecionará a saída (
STDOUT
&STDERR
AFAIK) do programa para um arquivonohup.out
, tornando-o irritante às vezes (como gerar um grande arquivo de log); portanto, você pode fazer seu próprio redirecionamento ou redirecioná-lo para / dev / null se você quiser.fonte
nohup
pode ser usado para isso. Basta suspender o processo em execução e enviá-lo para segundo plano (Ctrl
+Z
e executarbg
) e então você poderá emitirnohup %1
.Além disso,
nohup
você pode iniciar o processo em segundo plano usando "&" e o subshell:Sufixe o comando com & e coloque-o entre parênteses
Vamos dizer que seu processo ganha o pid 1922:
Observe que ele não está conectado ao processo de shell 11473, que era seu pai original. Portanto, se você sair ou matar o shell atual (11473), o processo 11922 continuará em execução e será desconectado dos pts.
Tente sair do shell e entre em um novo shell. Mesmo que este shell esteja conectado aos mesmos pontos, você pode ver o processo agora sem pontos:
Não sei como é chamado ou documentado no Posix, mas eu uso dessa maneira desde 1990 no bsh, ksh e agora no bash.
Por fim, você pode usar o
bg
comando shell interno:Basta iniciar o programa e se você decidir fazer uma pausa ou planejar mantê-lo em segundo plano, digite CTRL + Z:
Agora deixe-o continuar sendo executado em segundo plano:
Se você observar as informações do processo, ele ainda possui um processo pai:
Então, saia do processo atual. O processo em execução em segundo plano é desanexado do pai original e continua em execução em segundo plano:
Entre novamente e veja as informações do processo:
fonte