|SETSID(2)||Linux Programmer's Manual||SETSID(2)|
The calling process will be the only process in the new process group and in the new session.
Initially, the new session has no controlling terminal. For details of how a session acquires a controlling terminal, see credentials(7).
- The process group ID of any process equals the PID of the calling process. Thus, in particular, setsid() fails if the calling process is already a process group leader.
A process group leader is a process whose process group ID equals its PID. Disallowing a process group leader from calling setsid() prevents the possibility that a process group leader places itself in a new session while other processes in the process group remain in the original session; such a scenario would break the strict two-level hierarchy of sessions and process groups. In order to be sure that setsid() will succeed, call fork(2) and have the parent _exit(2), while the child (which by definition can't be a process group leader) calls setsid().
If a session has a controlling terminal, and the CLOCAL flag for that terminal is not set, and a terminal hangup occurs, then the session leader is sent a SIGHUP signal.
If a process that is a session leader terminates, then a SIGHUP signal is sent to each process in the foreground process group of the controlling terminal.