Como executar uma tarefa em segundo plano? [duplicado]

3

É possível executar uma tarefa ou script iniciado a partir do terminal em segundo plano?

    
por Anandu M Das 18.12.2014 / 15:22

4 respostas

8

Há várias respostas aqui, dependendo do que você deseja (essa resposta é válida em bash e zsh shells, outras podem variar).

Se você precisar executar um comando em segundo plano e souber antes de executá-lo, basta adicionar um & no final do comando (usando sleep 60 , não fazer nada durante 1 minuto, como exemplo de comando):

[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %

Se você já o executou, você pode pará-lo com ctrl - Z , e quando o shell lhe dá um prompt, você pode fazer o background com o comando bg :

1& [romano:~] % sleep 60  
^Z
[1]  + 9084 suspended  sleep 60
1z [romano:~] 20 % bg
[1]  + 9084 continued  sleep 60
1& [romano:~] % 

Em ambos os casos, o processo / trabalho ainda está conectado ao seu terminal; Se você fechar o terminal, um sinal de desligamento (HUP) é enviado para o processo --- a maioria dos processos será encerrada normalmente. Se você precisa garantir que o processo continuará, você pode iniciá-lo com:

nohup sleep 60 & 

ou, depois de ter enviado para o background com bg ou com um simples & , diga ao shell para esquecê-lo, com:

disown %% 

( %% é um atalho controle de tarefas e aqui está o último processo enviado em segundo plano).

Depois, você deve levar em conta a saída do processo - nos dois primeiros casos, a saída ainda chegará ao terminal; no caso de nohup ele será desviado em um arquivo chamado nohup.out , e no último caso (com disown ) ele irá para o terminal a menos que você o feche, caso em que o comportamento é bastante indefinido. É uma boa prática cuidar da produção de um processo em segundo plano usando redirecionamento .

    
por Rmano 18.12.2014 / 16:34
5

adicione & ao comando.

Exemplo:

$ cp FromA ToB &
    
por mogoh 18.12.2014 / 15:35
2

Este exemplo executará atualizações em segundo plano:

sudo apt-get dist-upgrade -y &

Apenas observe o singe & amp; ..
Se você quiser ocultar o stdout, faça o seguinte:

sudo apt-get dist-upgrade -y > /dev/null &
    
por davidbaumann 18.12.2014 / 15:32
1

Se você quiser mais avançado e quiser usar a sessão mais tarde, localmente ou por SSH, poderá usar a tela.

# screen
# apt-get update -y

Em seguida, pressione CTRL + A seguido por D .

Mais tarde, você pode reconectar:

# screen -rd
    
por davidbaumann 18.12.2014 / 15:34