Como definir o comando em background, fechar o terminal e recuperá-lo para fg?

10

Estou tentando descobrir como executar um comando em segundo plano e depois trazê-lo para o primeiro plano mais tarde. Estou farto de tutoriais e respostas onde as pessoas afirmam que é simples, basta anexar & ao final do comando para executá-lo em segundo plano. Está funcionando apenas dentro de uma única janela de terminal. Eu quero colocar o comando em segundo plano em um terminal e colocá-lo de volta em primeiro plano depois de reabrir o terminal

Exemplo:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Claro que depois de fechar o terminal, não é encontrado nenhum emprego.

Próximo exemplo:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

O que eu fiz de errado? Alguém poderia me explicar como executar o comando em segundo plano e colocá-lo de volta em primeiro plano.

    
por Timur Fayzrakhmanov 18.01.2014 / 11:42

3 respostas

11

É impossível do jeito que você quer.

Vamos rever alguns conceitos básicos:

  • Um grupo de processos é uma coleção de processos relacionados que podem ser todos sinalizados de uma só vez.
  • Uma sessão é uma coleção de grupos de processos, que são anexados a um único dispositivo de terminal (conhecido como terminal de controle) ou não estão conectados a nenhum terminal.

Se você fechou o terminal, todos os processos da sessão estão mortos, exceto os (daemons) reparados no processo init. E não há como dar a eles um terminal de controle novamente.

Em uma palavra, a reparação de processos é altamente restrita em sistemas POSIX (a daemonização é uma exceção) e seus requisitos não podem ser atendidos.

    
por sgx1 18.01.2014 / 12:20
16
  1. Instale screen :

    sudo apt-get install screen
    
  2. Iniciar screen :

    screen -S session_name
    
  3. Execute seus comandos de acordo com o que você precisa.

  4. Desanexar screen do terminal (seus comandos ainda estarão em execução):

    Pressione CTRL + a + d

  5. Feche o terminal

  6. Abra outro terminal e reconecte a última sessão screen :

    screen -r
    

Para mais informações e opções extras para screen , veja em man screen .

    
por falconer 18.01.2014 / 12:32
5

Você já tentou: byobu ou tmux , que são multiplexadores de terminal. Não é exatamente o que você está procurando, mas tem um comportamento semelhante.

byobu-screen

Em seguida, execute seu comando para desanexar:

byobu-screen -d

Para retomar:

byobu-screen -r

Veja link

    
por user.dz 18.01.2014 / 12:31

Tags