AFAIK, não há um caminho direto para colocar em primeiro plano um processo que tenha sido iniciado e passado em outro shell. Existem algumas maneiras de contornar isso, no entanto.
A melhor maneira é usar a tela GNU . Inicie uma sessão de tela, inicie seu processo, desconecte-se da sessão de tela, efetue logout, conecte-se novamente, reconecte-se à sessão de tela. O processo ainda está em execução e a tela mantém qualquer saída nos buffers da janela. Você nem precisa de fundo; você pode deixá-lo rodando em uma janela de tela e usar outras para outras tarefas.
A maneira feia é desligá-lo do terminal antes de sair. No bash, disown -h %[jobid]
faz isso; outras shells como o tcsh fazem isso automaticamente para processos em segundo plano quando você sai do shell. (Obtenha o $[jobid]
executando o comando jobs
.) Você não pode reconectar-se ao processo diretamente, mas se tudo que você precisa é stdout / stderr / stdin de um processo, você pode usar o GDB para fingir a reconexão. Esta é uma forma parcial de desta fonte (originalmente incluída em outra resposta ):
[...] with some dirty hacks, it is not
impossible to reopen a process'
stdout/stderr/stdin.
So you could still create a blank
screen window (for instance that runs
sleep).
And then use gdb for instance to
attach to the process, do some
call close(0)
call close(1)
call close(2)
call open("/dev/pts/xx", ...)
call dup(0)
call dup(0)
detach
The process' output would go to
screen. It wouldn't be attached to
that screen terminal, so for instance[sic]
would kill the "sleep" command, not
the process, but that could be enough
for the OP.
Existem algumas maneiras de fazer bash fazerem as devoluções automáticas , mas elas envolvem < em> shopts ou nohup ou outros truques bash para evitar o SIGHUP automático. O bash não é tão elegante quanto o tcsh nessa área, e você precisa saber antecipadamente que precisará disso para configurar a opção. É um pouco mais fácil lembrar-se de executar rejeição em seu trabalho em segundo plano antes de sair.