o que é um processo em segundo plano?

0

Aqui está uma definição comum de um processo em segundo plano:

"Um processo em segundo plano é um programa em execução sem entrada do usuário. Vários processos em segundo plano podem ser executados em um sistema operacional multitarefa, como o Linux, enquanto o usuário está interagindo com o processo em primeiro plano. Alguns processos em segundo plano, como daemons, por exemplo, nunca requerem entrada do usuário.Outros estão meramente em segundo plano temporariamente enquanto o usuário está ocupado com o programa atualmente rodando em primeiro plano.Então esse outro processo pode estar dormindo e ocupando espaço swap, até que seja ativado, o que torna atualmente é um processo em segundo plano. "

Dada essa definição, isso não tornaria um processo como o apache2 um processo em segundo plano, já que ele nunca interage com a entrada do usuário no terminal? E isso não consideraria a maioria dos processos em segundo plano do processo, já que a maioria dos processos em execução em um sistema não lida com a entrada do usuário no terminal? Estranhamente, eu pessoalmente não consideraria o apache2 um processo em segundo plano, já que um usuário interage com ele através de requisições http (não apenas um terminal).

    
por JohnMerlino 14.07.2013 / 00:24

2 respostas

1

Um processo de primeiro plano não requer interação do usuário. Você pode fazer

cp very_large_file destination

e isso bloquearia seu terminal até a cópia ser concluída e seria considerado um processo de primeiro plano sem interação do usuário. O ponto aqui é se o processo bloqueia a execução de outros processos até que ele termine.

Duas maneiras de transformar um processo em primeiro plano em um plano de fundo:

1- Adicionando um e comercial ( & ) no final da sua linha de comando:

cp very_large_file destination &

2- Parando um processo em primeiro plano e colocando-o em segundo plano:

cp very_large_file destination

CTRL + Z

bg

Agora o apache2 definitivamente contaria como um processo em segundo plano: sim, você pode interagir com ele via solicitações http, mas ele simplesmente escuta na porta 80 (por padrão) esperando por tal solicitação: ele não bloqueia o sistema até que o usuário faz um pedido.

E por que você considera a maioria dos processos considerados processos em segundo plano? Isso é de fato normal em um "sistema operacional multitarefa".

    
por 14.07.2013 / 00:42
3

Existem duas definições comuns de "processo em segundo plano", uma em termos gerais e uma precisa e específica para o unix.

Em um sentido amplo, você pode chamar de "processo em segundo plano" qualquer processo que não esteja interagindo com o usuário sentado no console. Nesse sentido, o Apache é um processo em segundo plano.

Na terminologia do unix, o “processo em segundo plano” tem uma definição precisa. Um processo em segundo plano é um processo iniciado a partir de um terminal, mas atualmente está proibido de interagir com o terminal. (Estou simplificando, não considerando grupos de processos.) Você normalmente obtém um processo em segundo plano iniciando um trabalho em segundo plano em um shell:

$ myprogram &
[1] 12345
$ 

ou iniciando um programa, suspendendo-o e permitindo que ele continue em segundo plano:

$ myprogram
^Z
[1]+ Stopped    myprogram
$ bg
[1]+ myprogram &
$ 

Se você iniciar um programa sem & , ele estará em primeiro plano. Só pode haver um único processo em primeiro plano em um determinado terminal de cada vez. (Ou, em geral, um único grupo de processos, se o processo de primeiro plano iniciar alguns subprocessos.) Os shell internos bg e fg alteram qual processo está em primeiro plano. Quando um processo está em segundo plano, se ele tentar ler ou gravar no terminal, ele é parado por um sinal SIGTTIN ou SIGTTOUT .

Eu acho sua intuição que o Apache não é um processo em segundo plano porque está interagindo com o usuário por causa do HTTP. O Apache não está interagindo com o usuário: ele está interagindo com um navegador da Web remoto (que está interagindo com o usuário) ou com um cliente automatizado (que não está interagindo com o usuário). Se você considerar qualquer processo que interaja com um processo interativo como interativo, qualquer processo é interativo, o que o torna um conceito inútil.

A definição citada combina os processos em segundo plano com processos ociosos. Não há nenhuma razão para que um processo em segundo plano seja suspenso ou trocado mais do que um processo em primeiro plano. Um processo em segundo plano pode estar fazendo algum cálculo pesado, por exemplo. Por outro lado, se o usuário se afastar do console e houver outros processos ativos, os processos em primeiro plano podem ser trocados.

    
por 14.07.2013 / 02:03