Une session est un ensemble de processus qui partagent un terminal de contrôle. setsid est utile lorsque vous souhaitez démarrer une nouvelle session, car vous avez commencé à vous connecter à un nouveau terminal -- comme lors du démarrage d'un shell dans un émulateur de terminal -- ou vous voulez un démon (que vous ne voulez pas être associé à un terminal de contrôle).
La meilleure explication que je connaisse de ces aspects est dans R.W. Stevens Programmation avancée dans l'environnement Unix .
Why do we need to group processes?
Considérez la situation dans laquelle vous souhaitez fermer proprement, et cela inclut l'envoi d'un signal à vos enfants. Il existe une condition de concurrence inhérente :un SIGCHLD n'a pas été reçu, vous savez donc que l'enfant est toujours en vie. Donc, vous envoyez un signal. Mais l'enfant se termine avant que le signal ne soit envoyé et un autre processus (indépendant) démarre et obtient le même pid que l'enfant auquel le signal a été envoyé. Le signal va ensuite au nouveau processus sans rapport. C'est mauvais. Ainsi, plutôt que d'envoyer un signal à des pid spécifiques, vous signalez le groupe de processus. Lorsque l'enfant meurt et qu'un nouveau processus commence avec le pid d'origine, le nouveau processus n'est pas partie du groupe de processus et le problème décrit ci-dessus est évité.