Bash / ZSH: Desfazendo 'rejeitar'

28

Existe uma maneira de "reconectar" um processo à tabela de trabalhos de shells depois que ele foi 'deserdado'?

Edit: $ SEARCHENGINE totalmente me falha. Não parece muito bom.

    
por nisc 03.09.2010 / 00:32

5 respostas

15

Considerando como funciona o Linux e a propriedade do processo, temo que não seja realmente possível re-possuir um processo, sem a ajuda do processo de adoção.

Um pai pode 'negar' um filho, que é então 'adotado' pelo processo chamado 'init'. A segurança do sistema impede que alguém pegue os processos de outra pessoa. Quando você o descarta, um processo se torna alguém (init) para controlar. Você como o 'usuário' ainda pode matar o processo, mas você não pode recuperá-lo. É improvável que a tentativa de forçar o init a retornar seu processo funcione, pois o init nem sequer lê as mensagens.

Por mais que soe, realmente se resume à resposta de "Don't do that!".

    
por 29.10.2010 / 14:40
18

Embora eu assuma que isso não ajuda ninguém na infeliz situação de ter deserdado o processo errado, se você fosse banir a rejeição do seu fluxo de trabalho e substituí-la por:

link

Você seria capaz de reparar qualquer processo (ou seja, movê-lo para dentro da tela).

    
por 22.05.2011 / 03:23
9

Tudo o que você precisa é de reptyr . Ele vive no GitHub e foi empacotado para o Debian desde o Wheezy, e provavelmente também para outras distribuições GNU / Linux. Ele colocará em primeiro plano seu processo de renúncia no terminal atual se você invocá-lo com seu ID de 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
    
por 10.06.2015 / 14:24
1

Desculpe, não. Em princípio, isso seria possível, já que a rejeição apenas altera algum estado interno do shell - basicamente remove o ID do processo de uma lista, e ele pode ser colocado de volta sem muito trabalho (você teria que ser um pouco cuidadoso ao testar isso). o pid reincorporado está na sessão certa, mas isso não é insuperável). Mas nenhuma das shells usuais (bash, ksh, tcsh, zsh) parece ter uma maneira de adicionar novamente. (Embora com o zsh você possa escrever nos arrays associativos jobstates , jobdirs e jobtext , não sei o quanto você pode conseguir isso.)

Se você quiser que o shell envie sinais para o processo de renúncia, como ocorre com seus subprocessos próprios, você pode escrever um trabalho de stub que aguarda até receber um sinal e enviar o mesmo sinal para o processo de renúncia. Você pode enviar SIGSTOP e SIGCONT para o processo deserdado para simular Ctrl + Z e bg . Nada disso será tão conveniente quanto re-possuir.

    
por 29.10.2010 / 23:23
0

Quais são as circunstâncias? Se você quer apenas recuperar o seu terminal por um tempo, você pode usar o GNU Screen . Ele não separa o processo de um terminal - a tela emula um para o benefício do processo - mas você pode anexá-lo e desconectá-lo do terminal real que está usando. Você pode até mesmo desanexar uma tela, fazer logout e, em seguida, fazer login novamente e anexar novamente à mesma tela.

    
por 03.09.2010 / 00:50

Tags