Qual é a diferença entre um trabalho e um processo?

Respostas:

46

Um processo é qualquer programa em execução com seu próprio espaço de endereço.

Um trabalho é um conceito usado pelo shell - qualquer programa iniciado interativamente que não desanexe (ou seja, não um daemon) é um trabalho. Se você estiver executando um programa interativo, pressione CtrlZpara suspendê-lo. Em seguida, você pode iniciá-lo novamente em primeiro plano (usando fg) ou em segundo plano (usando bg).

Enquanto o programa estiver suspenso ou em execução em segundo plano, você poderá iniciar outro programa - você terá dois trabalhos em execução. Você também pode iniciar um programa em execução em segundo plano, acrescentando um "&" como este: program &. Esse programa se tornaria um trabalho em segundo plano. Para listar todos os trabalhos que você está executando, você pode usar jobs.

Para obter mais informações sobre tarefas, consulte esta seção da página de manual do bash.

Shawn J. Goff
fonte
No exemplo acima, quando temos 2 trabalhos em execução , também temos 2 processos em execução , não é? Você poderia elaborar o significado de seu próprio espaço de endereço ? Nesse caso, um programa não possui seu próprio espaço de endereço?
Kenny
@ Kenny sim, esses trabalhos também seriam processos. De fato, todo trabalho é um processo. Um trabalho está relacionado à sua sessão de ela. Todo processo iniciado e que não se destaca do seu tty é um trabalho.
Shawn J. Goff
@ Kenny, quanto aos processos, quando digo programa, isso é uma coisa muito geral - um conjunto de instruções ordenadas para a CPU executar. Isso também é chamado de tarefa ou thread de execução. Um processo pode criar outro encadeamento que compartilha seu espaço de endereço.
Shawn J. Goff
1
comandos canalizados como em ls | sorté um trabalho, mas cada comando é executado como um processo filho de um processo de subshell diferente. Este é um exemplo de trabalho que consiste em vários processos. Como sua definição de trabalho explica que um trabalho pode consistir em vários processos?
Tim
30

O UNIX possui conceitos separados "processo", "grupo de processos" e "sessão".

Cada shell que você obtém no login torna-se o líder de seu novo grupo de sessões e processos e define o grupo de processos de controle do terminal para si próprio.

O shell cria um grupo de processos dentro da sessão atual para cada "trabalho" iniciado e coloca cada processo iniciado no grupo de processos apropriado. Por exemplo, ls | headé um pipeline de dois processos, que o shell considera um único trabalho e pertencerá a um único novo grupo de processos.

Um processo é um (conjunto de) encadeamentos de execução e outro contexto, como espaço de endereço e tabela de descritor de arquivo. Um processo pode iniciar outros processos; esses novos processos pertencerão ao mesmo grupo de processos que o pai, a menos que outra ação seja tomada. Cada processo também pode ter um "terminal de controle", que começa da mesma forma que seu pai.

O shell tem o conceito de trabalhos "em primeiro plano" e trabalhos "em segundo plano". Trabalhos em primeiro plano são grupos de processos com controle do terminal e trabalhos em segundo plano são grupos de processos sem controle do terminal.

Cada terminal possui um grupo de processos em primeiro plano. Ao trazer um trabalho para o primeiro plano, o shell o define como o grupo de processos em primeiro plano do terminal; ao colocar um trabalho em segundo plano, o shell define o grupo de processos em primeiro plano do terminal como outro grupo de processos ou ele próprio.

Os processos podem ler e gravar no terminal de controle, se estiverem no grupo de processos em primeiro plano. Caso contrário, eles receberão SIGTTINe SIGTTOUsinalizarão nas tentativas de leitura e gravação no terminal, respectivamente. Por padrão, esses sinais suspendem o processo, embora a maioria dos shells oculte SIGTTOUpara que um trabalho em segundo plano possa gravar no terminal ininterruptamente.

efémero
fonte
1
Esta é uma visão geral boa e concisa do gerenciamento de processos do shell e do terminal. Poderia ser aprimorado mencionando que um "trabalho" é um "pipeline", que pode ser mais de um processo conectado juntos em um grupo de processos.
Chris Página
1

Na computação, um trabalho é uma unidade de trabalho ou unidade de execução (que executa o referido trabalho). Um componente de um trabalho (como uma unidade de trabalho) é chamado de tarefa ou etapa (se sequencial, como em um fluxo de trabalho). Como uma unidade de execução, um trabalho pode ser identificado concretamente com um único processo, que por sua vez pode ter subprocessos (processos filho; o processo correspondente ao trabalho sendo o processo pai) que executa as tarefas ou etapas que compõem o trabalho do trabalho; ou com um grupo de processos; ou com uma referência abstrata a um processo ou grupo de processos, como no controle de tarefas do Unix.

Fonte

bons exemplos

Premraj
fonte
-1

As definições acima são muito técnicas, mas talvez a operação desejasse mais esclarecimentos do dia a dia. Eu acho que um trabalho é um processo agendado. Quando lidamos com processos em geral, não existe necessariamente a noção de cronograma, mas quando usamos a palavra "trabalho" sempre queremos dizer que ele é agendado ou repetitivo como um loop, é como um trabalhador.

eloone
fonte
1
Por favor, explique os votos para baixo, se você quiser votar. Se esta resposta não estiver correta, pelo menos explique por que você acha que não está correta. Até agora, ainda acho que minha resposta faz sentido, é o tipo de explicação que eu estava procurando.
Eloone
Concordo que quem votou contra deveria ter explicado o porquê. Mas acho que a razão do voto negativo é que sua definição de "trabalho" simplesmente não está correta.
Prograde
Gostaria de explicar por que não está correto? "Trabalho" não é definido claramente como o que é um "processo" (com PID no sistema). Na minha experiência, "trabalho" sempre foi uma palavra usada para definir um certo tipo de processo que costumava ser agendado, e em segundo plano, e que você pode iniciar. É por isso que é difícil de definir porque o uso o define. Também pode ser um grupo de processos, mas também é um "contêiner" (LXC), mas um "contêiner" não é um "trabalho". Um processo iniciado como "nginx" também não é uma "tarefa". Meu comentário ainda adiciona sth à resposta. Mais uma vez, responde o que eu estava tentando entender.
Eloone 4/04
Também estou procurando uma definição adequada, então desculpe, ainda não posso responder. Mas o que não está correto, é que teria que ser agendado.
Prograde