Perché abbiamo bisogno di fork per creare un nuovo processo

3

In Unix ogni volta che vogliamo creare un nuovo processo, forgiamo il processo corrente, ovvero creiamo un nuovo processo figlio che è esattamente uguale al processo genitore e quindi eseguiamo una chiamata di sistema exec per sostituire il processo figlio con un nuovo processo cioè sostituiamo tutti i dati per il processo genitore eith per il nuovo processo. Perché creiamo una copia del processo principale in primo luogo e perché non creiamo direttamente un nuovo processo? Sono nuovo di Unix, per favore, spiegalo in termini "non personale".

    
posta sarthak 11.06.2014 - 19:20
fonte

1 risposta

2

Separando fork () e execve () permetti al genitore di controllare l'ambiente che il bambino eredita.

L'esempio più comune è il reindirizzamento della shell IO, ad esempio nel seguente comando:

find . -name '*.java' | grep Frob

In questo esempio, l'output standard di find è collegato allo standard input di grep . Questi sono due descrittori di file distinti, che sono oggetti in memoria.

In un mondo in cui fork e exec sono separati, la shell contiene codice che riassegna i descrittori di file nel figlio forked, prima di eseguire il nuovo programma. In un mondo in cui fork e exec sono separati, è necessario un qualche tipo di meccanismo per passare queste informazioni al programma figlio, magari tramite un "noto" ID di memoria condivisa.

Il precedente modello (fork / exec) è molto più semplice da implementare e consente un caso predefinito in cui padre e figlio condividono molte delle stesse risorse.

    
risposta data 11.06.2014 - 21:19
fonte

Leggi altre domande sui tag