Creazione di processo:
Il modo principale in cui viene creato un nuovo processo è tramite la chiamata di sistema `fork (). `fork ()` crea una copia quasi identica del processo di chiamata (il processo * genitore *). Sia il genitore che il processo * neo creato * continuano l'esecuzione dal punto della chiamata `fork ()`. La differenza chiave è il valore di ritorno di `fork ()`:
* nel processo genitore: `fork ()` restituisce l'ID di processo (PID) del processo figlio. Questo PID è un identificatore univoco per il bambino.
* nel processo figlio: `fork ()` restituisce 0.
Dopo `fork ()`, i processi genitore e figlio seguono in genere percorsi di esecuzione diversi. Il processo figlio utilizza spesso la `Exec ()` Famiglia di chiamate di sistema (`Execl`,` Execv`, `Execvp`, ecc.) Per sostituire la sua immagine corrente con un nuovo programma. `Exec ()` sovrascrive lo spazio di memoria del bambino con il codice e i dati del nuovo programma. Se il figlio non usa `Exec ()`, continua a eseguire lo stesso codice del genitore, creando un clone vero.
Altri modi in cui vengono creati i processi includono:
* `vfork ()` (meno comune e potenzialmente problematico): Simile a `fork ()`, ma con sottili differenze nella condivisione della memoria. Generalmente evitato a causa di potenziali deadlock.
* `clone ()` (più avanzato): Offre un controllo a grana più fine sulle risorse condivise tra i processi genitore e figlio. Utilizzato nelle librerie e modelli di threading avanzati.
* Inizializzazione del sistema: Il processo INIT (PID 1) è l'antenato di tutti gli altri processi nel sistema. È responsabile dell'avvio di altri processi durante l'avvio.
* `pThread_create ()`: Questa funzione viene utilizzata per la creazione di thread all'interno di un processo. Mentre i thread condividono lo stesso spazio di memoria del loro processo principale, sono ancora considerate unità di esecuzione separate gestite dal kernel.
Eliminazione del processo (terminazione):
Un processo termina (viene eliminato) in diverse circostanze:
* Terminatura normale: Il processo completa la propria esecuzione e chiama la chiamata di sistema `exit (). Questo segnala il sistema operativo che ha terminato. Lo stato di uscita può essere utilizzato per trasmettere successo o fallimento.
* Terminatura anormale: Il processo si arresta in modo anomalo a causa di un errore di segmentazione, istruzioni illegali o altri errori. Il kernel termina il processo.
* Terminatura del segnale: Un altro processo (o il kernel stesso) può inviare un segnale (ad es. `Sigterm`,` Sigkill`) a un processo, forzando la sua risoluzione. `Sigterm` consente al processo di ripulire prima di uscire, mentre` Sigkill` termina immediatamente il processo senza alcuna pulizia.
* Terminatura del processo genitore: Se un processo genitore termina, anche i processi figlio possono essere terminati, a seconda delle impostazioni del sistema operativo (spesso ereditate dal gruppo di processo del genitore). Il processo `init` in genere adotta bambini orfani.
il ruolo del kernel:
Il kernel svolge un ruolo cruciale nella gestione dei processi durante il loro ciclo di vita. Gestisce la creazione di processi, la pianificazione, l'allocazione della memoria, la gestione delle risorse, la gestione del segnale e la terminazione del processo. Il kernel mantiene le strutture di dati (come la tabella di processo) per tenere traccia delle informazioni su ciascun processo di esecuzione.
In sintesi, la creazione e la cancellazione dei processi in Unix sono accuratamente orchestrati dal kernel e coinvolgono una serie di chiamate di sistema che consentono ai programmatori di controllare il ciclo di vita del processo. La famiglia `fork ()` e `Exec ()` (per la creazione) e `exit ()` e i segnali (per la cancellazione) sono i componenti principali.
sistemi © www.354353.com