O que significa executar um processo em segundo plano? [duplicado]

1

O que exatamente significa executar um processo em segundo plano?

A diferença entre $program e $program& : é apenas que o descritor do arquivo de entrada não é herdado do shell ou há algo mais / algo mais?

    
por Lavya 22.07.2015 / 19:08

3 respostas

3

program & ainda terá o mesmo stdin e stdout como program , mas program & normalmente (dependendo das configurações do terminal) não poderá ler stdin sem ser parado por o sistema através do sinal SIGTTIN (consulte link ).

Processos em segundo plano não receberão sinais de atalhos de teclado ( Ctrl-C, Ctrl-\, Ctrl-Z ) e, é claro, processos em execução em segundo plano permitirão que você continue usando o shell (por exemplo, para iniciar processos adicionais).

    
por 22.07.2015 / 19:29
1

Isso significa várias coisas.

  1. O processo em segundo plano não está atrasando o seu terminal. Ele está sendo executado "de forma assíncrona", pois não estamos aguardando a conclusão. Ele ainda morrerá se a desconexão for forçada.
  2. Consequentemente, as respostas não são necessariamente "ativas", mas "passivas", é uma boa forma de redirecionar a saída para um arquivo para inspeção posterior.
  3. A entrada interativa será problemática, a menos que uma solução em lote (arquivo de comando ou arquivo de resposta ou expectativa) seja considerada.
  4. Para trabalhos de "longa duração", você pode considerar começar como um serviço.
  5. Veja também tmux e tela para alternativas se o backgrounding for problemático.
por 22.07.2015 / 19:26
0

Quando você inicia um processo em primeiro plano, o shell aguardará a conclusão (com uma das famílias wait() de chamadas do sistema) antes de ler o próximo comando. Quando você inicia um processo em segundo plano, o shell não espera que ele seja concluído ou mude de estado; lê e executa imediatamente o próximo comando.

Note que, mesmo que você inicie um processo em segundo plano, você pode movê-lo entre segundo plano e primeiro plano à vontade (com ^Z e bg ou com fg ). Todos os trabalhos são iguais a esse respeito. A única restrição é que pode haver no máximo um trabalho em primeiro plano a qualquer momento, e os trabalhos em segundo plano serão interrompidos se eles tentarem usar o tty do shell.

Sempre que não houver nenhum trabalho em primeiro plano, o shell lerá seu próximo comando (do arquivo de script ou do stdin) e o executará.

    
por 22.07.2015 / 19:50