Qual é a diferença entre um "trabalho" e um "processo"?
Qual é a diferença entre um "trabalho" e um "processo"?
Respostas:
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.
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?
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 SIGTTIN
e SIGTTOU
sinalizarã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 SIGTTOU
para que um trabalho em segundo plano possa gravar no terminal ininterruptamente.
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.
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.