Una sessione è un insieme di processi che condivide un terminale di controllo. setsid è utile quando vuoi iniziare una nuova sessione, perché hai iniziato a connetterti a un nuovo terminale -- come quando avvii una shell all'interno di un emulatore di terminale -- o vuoi un demone (che non vuoi essere associato a un terminale di controllo).
La migliore spiegazione che conosco di questi aspetti è in R.W. Stevens Programmazione avanzata in ambiente Unix .
Why do we need to group processes?
Considera la situazione in cui desideri chiudere in modo pulito e ciò include l'invio di un segnale ai tuoi figli. Esiste una race condition intrinseca:non è stato ricevuto un SIGCHLD, quindi sai che quel bambino è ancora vivo. Quindi mandi un segnale. Ma il figlio termina prima che il segnale venga inviato e un altro processo (non correlato) si avvia e ottiene lo stesso pid del figlio a cui è stato inviato il segnale. Il segnale va quindi al nuovo processo non correlato. Questo non va bene. Quindi, invece di inviare un segnale a pid specifici, segnali il gruppo di processo. Quando il figlio muore e inizia un nuovo processo con il pid originale, il nuovo processo non parte del gruppo di processi e il problema sopra descritto viene evitato.