1. Sebbene l'utente acceda a un singolo processo (shell che è la sua interfaccia a riga di comando), gli utenti finiscono per eseguire molti processi a seguito di azioni come:
-> Esecuzione di attività non interattive in background.
-> Commutazione tra attività interattiva tramite controllo lavoro.
-> Avvio di più processi che funzionano insieme attraverso i tubi.
-> Esecuzione di un sistema di finestre come il sistema X Window che consente l'apertura di più finestre del terminale.
2. Per gestire tutti questi processi, il kernel deve formare gruppi di processi che comprendono questi processi.
3. Per gestire ulteriormente questi gruppi di processi in base all'utente, questi gruppi sono suddivisi in base all'utente in sessioni (si noti che l'utente non è un utente Linux, ma shell o terminale indica l'utente. Due terminali sulla stessa macchina hanno effettuato l'accesso dallo stesso utente Linux sta per 2 utenti diversi e quindi 2 sessioni utente diverse qui. Un terminale può controllare il terminale solo per una singola sessione).
Il processo che esegue la shell per quell'utente o quella sessione è noto come leader della sessione.
4. Notare inoltre che il terminale di chiusura premendo il pulsante 'x' non fa uscire da quel terminale. Quel terminale continua a funzionare in background. Se si desidera superare la sessione dal terminale, è necessario disconnettersi da lì premendo CTRL + D o uscire.
5. Mentre ti disconnetti dal terminale, il kernel invia il segnale SIGHUP (simile a kill -1) per elaborare il leader della sessione. Ora ogni altro processo in esecuzione nel terminale è figlio di questo leader della sessione. Questi processi figlio avevano formato gruppi di processi che sono controllati da questo processo di leader della sessione (processo padre).
6. Il processo del leader della sessione invia SIGHUP a ciascun processo figlio, alcuni terminano, mentre alcuni possono scegliere di non terminare (quelli sospesi o in esecuzione in background). Quelli che scelgono di non terminare diventano orfani come sessioni chiuse e immediatamente adottati dal processo init (genitore di tutto il processo nella macchina linux).
Per ulteriori informazioni, consultare Link Il modello di processo dello sviluppo Linux