Fork-exec - Fork–exec
Forcella-exec è una tecnica comunemente usata in Unix cui un esecuzione processo genera un nuovo programma.
Descrizione
Dennis M. Ritchie creata forcella esec. fork () è il nome del chiamata di sistema che il processo padre usa per "dividere" stessa ( "forchetta") in due processi identici. Dopo aver chiamato fork () , il creato processo figlio è una copia esatta del genitore, tranne per il valore di ritorno. Sono inclusi i file aperti, registro dello Stato, e tutte le allocazioni di memoria, che include il codice eseguibile del programma. In alcuni casi, i due continuano ad eseguire lo stesso binario, ma spesso uno (solitamente il bambino) commuta esecuzione un'altra eseguibile binario usando l'exec () chiamata di sistema.
Quando una forchette processo, una copia completa del programma in esecuzione è fatto nel nuovo processo. Questo nuovo processo (che è un figlio della madre) ha un nuovo identificatore di processo (PID). La forcella () restituisce PID del bambino al genitore, mentre restituisce 0 al bambino, in modo da consentire ai due processi identici a distinguere tra loro.
Il processo genitore può sia continuare l'esecuzione o attendere che il processo figlio per il completamento. Il bambino, dopo aver scoperto che è il bambino, si sostituisce completamente con un altro programma, in modo che il codice e l'indirizzo dello spazio del programma originale si perdono.
Se il genitore sceglie di aspettare che il bambino a morire, allora il genitore riceverà il codice di uscita del programma che il bambino eseguito. Per evitare che il bambino diventare zombie il genitore dovrebbe chiamare attendere sui propri figli, in modo periodico o alla ricezione del SIGCHLD segnale, che indica un processo figlio è terminato.
Quando il processo figlio chiama exec () , tutti i dati del programma originale è perso, ed è sostituito con una copia in esecuzione del nuovo programma. Questo è noto come sovrapposizione . Anche se tutti i dati vengono sostituiti, i descrittori di file che sono stati aperti nel genitore sono chiusi solo se il programma li ha segnato in modo esplicito close-on-exec . Ciò consente la pratica comune del genitore creare un tubo prima di chiamare fork () ed usando per comunicare con il programma eseguito.
Microsoft Windows non supporta il modello fork-exec, in quanto non dispone di una chiamata di sistema analogo a fork () . Il micelio () famiglia di funzioni dichiarate in process.h può sostituirlo nei casi in cui la chiamata a fork () è seguito direttamente dal exec () .
Quando una chiamata di sistema forcella è realizzata su WSL , lxss.sys fa parte del lavoro iniziale di preparazione per la copia del processo. Quindi chiama API interne NT per creare il processo con la semantica corretta e creare un thread nel processo con un contesto di registro identico. Infine, si fa un po 'di lavoro in più per completare il processo di copiatura e riprende il nuovo processo in modo che possa iniziare l'esecuzione.
- Jack Hammons di Microsoft
Riferimenti
- "Descrittori di file tra fork (2) / exec (2)" , sistemi operativi (Corso 304-427B), Franco Callari, Dipartimento di Ingegneria Elettrica, McGill University
- "forchetta e exec" , Tim Love, Università di Cambridge Dipartimento di Ingegneria
- Programmazione Avanzata in ambiente Unix , W. Richard Stevens , Addison-Wesley ISBN 0-201-56317-7
- Strumenti Unix Power , Jerry Peek, Tim O'Reilly , Mike Loukides, O'Reilly , ISBN 1-56592-260-3