Como recupero um processo renegado?

12

Semelhante a muitas perguntas anteriores, me vi executando um trabalho que eu gostaria de ter executado na tela. Fui forçado a negar o processo porque precisava desconectar. Agora que eu me reconectei, vejo que o processo ainda está em execução. Como posso "recuperar" o processo, para que eu possa ver sua saída e fornecer informações?

Essa questão é diferente de apenas mover um processo em execução para a tela, pois envolve a reabertura de identificadores perdidos stdin / out / err.

Sparr
fonte
2
Possível duplicata de Movendo um processo já em execução para Screen
mattdm

Respostas:

6

Esta é uma pergunta duplicada - consulte Movendo um processo já em execução para Screen , que aponta para retty , que é um hack horrível auto-descrito implementando o que eu sempre imaginei que fosse possível, mas nunca realmente tentei: encontra fd 0, 1 , e 2 (padrão de entrada, saída e erro, respectivamente) para o processo e anexa a eles, como um parasita horrível e aberrante que não deveria ser.

mattdm
fonte
Eu não conhecia esse programa - embora a verdade seja dita, não é uma boa prática usá-lo! Boa resposta, independentemente.
Andrew M.
6

Ao negar o processo, você está efetivamente dizendo que deseja que ele ignore os SIGHUPs emitidos pelo terminal. Depois que você fechar sua sessão (digamos, bash), esse processo passará a ser propriedade do init. Então, quando você diz que deseja readquirir um processo depois de deixar a propriedade, está dizendo que deseja tirar a propriedade de outro processo - que não foi implementado e por boas razões. Isso simplesmente não é possível de ser feito no Linux.

Andrew M.
fonte
1
Os processos não possuem outros processos assim. Um processo renegado ainda está sendo executado como você.
mattdm
Eles fazem assim que a sessão dos pais é encerrada - como indicado por sua pergunta. Eu atualizei minha resposta para refletir isso.
Andrew M.
O processo pai muda para init, mas isso é diferente da propriedade. O EUID e o UID do processo permanecem os do usuário original. Caso contrário, isso pode ser potencialmente explorável, porque cada usuário de repente teria uma maneira de executar o código como outro usuário e um usuário do sistema.
mattdm
1
EUID / UID! = PPID. Estou falando de propriedade do processo, não de permissões.
Andrew M.
Sim, acho que concordamos sobre tudo, exceto o significado do termo "propriedade do processo". Refere-se ao ID do usuário ao qual o processo está associado, não ao processo pai. Talvez a confusão se deva ao disowncomando específico do bash, que, apesar do nome, na verdade não tem nada a ver com a alteração da propriedade do processo.
mattdm