Respostas:
Considerando como os trabalhos linux e a propriedade do processo funcionam, receio que não seja realmente possível readquirir um processo, sem a ajuda do processo de adoção.
Um pai ou mãe pode 'renegar' um filho, que é 'adotado' pelo processo chamado 'init'. A segurança do sistema impede que alguém pegue os processos de outra pessoa. Quando você o nega, um processo se torna de outra pessoa (init) para controlar. Você como 'usuário' ainda pode matar o processo, mas não pode recuperá-lo. É improvável que tentar coagir o init a retornar seu processo, pois o init nem mesmo lê e-mails.
Por mais cruel que pareça, tudo se resume à resposta de "Não faça isso!".
reptyr
(veja minha resposta para um exemplo de uso).
Embora eu assuma que isso não ajude ninguém na situação infeliz de ter repudiado o processo errado, se você banir o repúdio do seu fluxo de trabalho e substituí-lo por:
https://github.com/nelhage/reptyr
Você seria capaz de reparar qualquer processo (ou seja, movê-lo para dentro da tela).
reptyr
é a solução, mas não há necessidade de parar de usar disown
. Para maior clareza, escrevi uma nova resposta.
Tudo que você precisa é reptyr
. Ele mora no GitHub e foi empacotado para o Debian desde o Wheezy, e provavelmente para outras distribuições do GNU / Linux também. Ele colocará em primeiro plano seu processo renegado no terminal atual se você o chamar com seu ID do processo (PID). Então, por exemplo:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
Desculpe, não. Em princípio, seria possível, uma vez que a renúncia apenas altera algum estado interno do shell - basicamente remove o ID do processo de uma lista e pode ser adiado sem muito trabalho (você teria que ter um pouco de cuidado ao testar isso o pid reconectado está na sessão correta, mas isso não é intransponível). Mas nenhuma das conchas usuais (bash, ksh, tcsh, zsh) parece ter uma maneira de adicionar novamente. (Embora com zsh você pode escrever para o jobstates
, jobdirs
e jobtext
arrays associativos; eu não sei o quanto você pode conseguir dessa maneira.)
Se você deseja que o shell envie sinais para o processo renegado, assim como para seus subprocessos de propriedade, é possível escrever um trabalho de stub que aguarde até receber um sinal e envie o mesmo sinal ao processo renegado. Você pode enviar SIGSTOP
e SIGCONT
ao processo renegado para simular Ctrl+ Ze bg
. Nada disso será tão conveniente quanto a nova posse.
Quais são as circunstâncias? Se você quiser apenas recuperar o seu terminal por um tempo, você pode usar o GNU Screen . Não desanexa completamente o processo de um terminal - a tela emula um para o benefício do processo - mas você pode conectá-lo e desconectá-lo do terminal real que está usando. Você pode até desanexar uma tela, sair e, em seguida, efetuar login novamente e reconectá-la à mesma tela.