# Clone de processo (forking)

A *syscall \*\*clone*\*\* sendo chamada *sem argumentos*, permite criar um outro processo filho exatamente igual, mas como processos são isolados, então todos os dados e programa **seriam copiados para outra área da memória**. Desta forma, poderíamos ter várias réplicas (filhos) do programa (pai) de modo a atender a uma demanda de acessos.

Esta técnica é chamada também de *forking de processos*.

<figure><img src="/files/kNITaPepNjbbVJYNUQq6" alt=""><figcaption></figcaption></figure>

Entretanto, *forking* pode fazer com que o uso de memória do computador atinja o limite máximo mais depressa, pois cada fork (filho) vai ter uma cópia exata do processo original (pai).

Forking é uma técnica bastante utilizada, principalmente em cenários de **escalabilidade** que demandam o cenário que foi trazido de aumento do número de requisições no sistema.

> Eu disse que não ia citar a palavra *escalabilidade* mas é natural falar de escalabilidade quando estamos falando de concorrência. Por isso não vejo este termo como algo "complexo". Uma vez entendendo sobre concorrência de verdade, fica mais fácil resolver problemas de escalabilidade
>
> E sim, eu posso futuramente escrever um outro guia falando só sobre escalabilidade de sistemas, mas vai ser inevitável falar de concorrência. Bem, você entendeu...

Okay, e se eu te disser que ao invés de clonar *todos os dados do programa (processo)*, eu quiser clonar apenas uma parte dele, fazendo com que esta parte seja mais **leve** e tenha **acesso compartilhado** com a memória do processo principal?

O sistema operacional oferece este recurso?

Bem, para nossa sorte sim. A mesma chamada *clone*, se receber alguns argumentos específicos, faz exatamente isso que queremos: um "processo filho" mais leve que compartilha a memória do processo principal com outros processos "irmãos".

A este processo "leve" damos o nome de **thread**.

> Não precisa se assustar e apegar a detalhes técnicos que vêm a seguir, pois quero apenas elucidar estas estruturas primitivas no sistema operacional


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://concorrencia101.leandronsp.com/parte-i-concorrencia-no-sistema-operacional/clone-de-processo-forking.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
