o que é um processo em segundo plano?

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

“Um processo em segundo plano é um programa executado sem intervenção 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 exigem entrada do usuário. Outros estão apenas em segundo plano temporariamente enquanto o usuário está ocupado com o programa atualmente em execução em primeiro plano. Para que outro processo possa estar adormecido e ocupando espaço de troca, até ser ativado, o que o torna atualmente um processo em segundo plano. “

Dada essa definição, Isso não faria de um processo como o apache2 um processo em segundo plano, já que nunca interage com a entrada do usuário no terminal? E isso não consideraria a maioria dos processos em segundo plano, 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 por meio de solicitações http (mas não de um terminal).

Comentários

  • Acho que existem duas definições aqui. Uma é sobre a entrada do usuário (se um processo pode aceitar entrada do usuário, como o terminal). A outra é se um processo está suspenso e sentado no espaço de troca ou não. Aqui você pode referir-se a ambos como processos de segundo plano, o que torna o termo confuso

Resposta

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

cp very_large_file destination 

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

Duas maneiras de você fazer um processo de primeiro plano em um plano de fundo:

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

cp very_large_file destination & 

2- Interromper um processo de primeiro plano e colocá-lo em segundo plano:

cp very_large_file destination 

CTRL + Z

bg 

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

E por que você questiona a maioria dos processos sendo considerados processos em segundo plano? Isso é realmente normal em um “sistema operacional multitarefa”.

Comentários

  • Por curiosidade, se eu tiver um programa que bloqueia, mas ele está sendo executado em uma sessão de tela GNU ou tmux, e então eu deixo essa sessão screen / tmux e retorno o controle ao terminal (mas é claro que eles ignoram o sinal HUP (hangup) para que ainda estejam em execução), seriam considerados um plano de fundo processar? Suponho que você diria que eles são processos de primeiro plano, já que em sua sessão, eles estão bloqueando, mesmo que não estejam bloqueando no terminal principal.
  • @JohnMerlino Eu diria que screen / tmux é o processo de primeiro plano neste caso e quando você " retorna o controle para um terminal " você o envia em segundo plano.

Resposta

Existem duas definições comuns de “Processo em segundo plano”, um em termos gerais e um preciso e específico para o unix.

Em um sentido amplo, você pode chamar “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 unix, “processo em segundo plano” tem uma definição precisa. Um processo em segundo plano é um processo que é iniciado a partir de um terminal, mas atualmente está impedido de interagir com o terminal minal. (Estou simplificando por não considerar 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 deixando-o continuar em segundo plano:

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

Se você iniciar um programa sem & , está em primeiro plano. Só pode haver um único processo em primeiro plano em um determinado terminal de cada vez. (Ou, mais geralmente, um único grupo de processo, se o processo de primeiro plano iniciar alguns subprocessos.) O shell incorpora bg e fg altera qual processo está em primeiro plano. Quando um processo está em segundo plano, se ele tenta ler ou escrever no terminal, ele é interrompido por um sinal SIGTTIN ou SIGTTOUT .

Acho sua intuição de que o Apache não é um processo em segundo plano porque está interagindo com o usuário via HTTP estranha. O Apache não está interagindo com o usuário: ele está interagindo com um navegador remoto (que está interagindo com o usuário) ou um cliente automatizado (que não está interagindo com o usuário). Se você considerar qualquer processo que “está interagindo com um interativo como um processo interativo, então qualquer processo é interativo, o que o torna um conceito inútil.

A definição que você cita confunde processos em segundo plano com processos ociosos. Não há razão para que um processo em segundo plano esteja inativo ou seja mais trocado do que um processo em primeiro plano. Um processo em segundo plano pode estar executando alguns cálculos pesados, por exemplo. Por outro lado, se o usuário sair do console e houver outros processos ativos, os processos em primeiro plano podem ser trocados.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *