Una sesión es un conjunto de procesos que comparte un terminal de control. setsid es útil cuando desea iniciar una nueva sesión, porque ha comenzado a conectarse a una nueva terminal, como cuando inicia un shell dentro de un emulador de terminal, o desea un demonio (que no desea asociarse con una terminal de control).
La mejor explicación que conozco de estos aspectos está en R.W. Stevens Programación avanzada en el entorno Unix .
Why do we need to group processes?
Considere la situación en la que desea cerrar limpiamente, y eso incluye enviar una señal a sus hijos. Hay una condición de raza inherente:no se ha recibido un SIGCHLD, por lo que sabe que el niño todavía está vivo. Así que envías una señal. Pero el elemento secundario finaliza antes de que se envíe la señal y se inicia otro proceso (no relacionado) que obtiene el mismo pid que el elemento secundario al que se envió la señal. La señal luego va al nuevo proceso no relacionado. Esto es malo. Entonces, en lugar de enviar una señal a pids específicos, envía una señal al grupo de procesos. Cuando el niño muere y comienza un nuevo proceso con el pid original, el nuevo proceso no parte del grupo de procesos y se evita el problema descrito anteriormente.