Pause um processo e traga-o de volta para o primeiro plano em uma tela separada no Ubuntu [duplicado]

0

Um processo colocado em suspensão emitindo ^Z pode ser trazido de volta ao primeiro plano, listando as tarefas em execução $ jobs e fornecendo o ID da tarefa para fg %id . Mas quando tentei listar os trabalhos em uma tela separada do mesmo terminal, não houve resultados. Como conseguir isso?

O que eu quero é começar o mesmo processo sem matá-lo em uma tela separada do mesmo terminal.

    
por Gayan Kavirathne 19.07.2018 / 10:19

2 respostas

1

O terminal é um visualizador de um processo como o shell. O terminal em si não executa nenhum comando - esse é o propósito do shell - mas sem o terminal você não pode interagir com o shell ou qualquer outro programa executado.

Normalmente, quando você fecha uma janela de terminal, ele envia um sinal ao shell para que ele feche, o que, por sua vez, elimina qualquer processo que você possa ter executado lá.

Você pode executar um processo em screen . O que isto faz é criar um "terminal virtual" para a execução de um shell. Sua janela de terminal "real" pode ser anexada a essa sessão screen e controlar o terminal virtual que screen forneceu. O efeito líquido é que parece perfeitamente normal, MAS você também pode se desconectar da tela virtual e deixar o shell continuar rodando.

screen                     # Create a leader and a virtual terminal/screen running a shell
screen -ls                 # List sessions (attached/detached)
screen -r                  # Reattach to the single detached session
screen -r {identifier}     # Reattach to the named detached session
screen -md {command...}    # Make a new detached session running {command...}

Finalmente, Ctrl A d desanexa da sessão atual e Ctrl A ? mostra a lista de comandos interativos.

    
por 19.07.2018 / 11:23
1

Você não pode. O processamento de tarefas de shell (processos de primeiro e segundo plano) é feito por cada instância de shell individual. Você não pode migrar um trabalho de um shell interativo para outro, nem mesmo dentro de algo como screen .

O terminal realmente não tem nada a ver com isso. Apenas corre o shell.

O que você pode fazer é migrar uma sessão de shell inteira com um multiplexador de terminal, como tmux ou screen . Uma sessão de shell dentro de um desses pode ser movida para outro terminal, separando a sessão screen ou tmux em um terminal e reconectando a ela em outro na mesma máquina.

Com tmux , isso é feito primeiro iniciando tmux e, em seguida, iniciando o programa dentro da sessão tmux . Quando o programa está rodando, você pode pressionar o prefixo d (prefixo é Ctrl + B por padrão) para desanexar a sessão tmux . Em outro terminal, você fornece o comando tmux attach para recuperar a sessão tmux . Desanexar também pode ser feito através do comando tmux detach .

Consulte os manuais de screen e tmux em seu sistema.

    
por 19.07.2018 / 10:25