Согласно Стивенсу, setsid() делает три важные вещи:
Процесс становится лидером сеанса нового сеанса, который содержит только вызывающий процесс. (PID = SID)
Процесс становится лидером группы процессов новой группы. (PID = SID = PGID)
У процесса не будет управляющего терминала. Если он у него был до setsid(), то связь будет разорвана.
Кроме того, setsid() не может завершиться успехом, если вызывающий процесс уже является лидером группы процессов (PID = PGID), поэтому необходимо сначала вызвать fork(), который гарантирует, что вновь созданный процесс не является лидером группы процессов (он наследует идентификатор группы от родителя).
Вызов setsid() важен, потому что у демонов не должно быть управляющих терминалов. Если демон запускается из командной оболочки, он подвергается воздействию сигналов от управляющего терминала пользователя, которые могут спровоцировать его неожиданное завершение.