.\" tiny changes from a man page by Charles Livingston).
.\" Modified Sun Jul 21 14:45:46 1996 <aeb@cwi.nl>
.\"
-.TH SETSID 2 2014-12-31 "Linux" "Linux Programmer's Manual"
+.TH SETSID 2 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
setsid \- creates a session and sets the process group ID
.SH SYNOPSIS
.ad l
+.B #include <sys/types.h>
+.br
.B #include <unistd.h>
-.sp
+.PP
.B pid_t setsid(void);
.br
.ad b
(i.e., its session ID is made the same as its process ID).
The calling process also becomes
the process group leader of a new process group in the session
-(i.e., its process group ID is made the same as it process ID).
-
+(i.e., its process group ID is made the same as its process ID).
+.PP
The calling process will be the only process in
the new process group and in the new session.
-The new session has no controlling terminal.
+.PP
+Initially, the new session has no controlling terminal.
+For details of how a session acquires a controlling terminal, see
+.BR credentials (7).
.SH RETURN VALUE
On success, the (new) session ID of the calling process is returned.
On error,
.BR setsid ()
fails if the calling process is already a process group leader.
.SH CONFORMING TO
-SVr4, POSIX.1-2001.
+POSIX.1-2001, POSIX.1-2008, SVr4.
.SH NOTES
A child created via
.BR fork (2)
inherits its parent's session ID.
The session ID is preserved across an
.BR execve (2).
-
+.PP
A process group leader is a process whose process group ID equals its PID.
Disallowing a process group leader from calling
.BR setsid ()
two-level hierarchy of sessions and process groups.
In order to be sure that
.BR setsid ()
-will succeed,
+will succeed, call
.BR fork (2)
-and
+and have the parent
.BR _exit (2),
-and have the child do
+while the child (which by definition can't be a process group leader) calls
.BR setsid ().
+.PP
+If a session has a controlling terminal, and the
+.B CLOCAL
+flag for that terminal is not set,
+and a terminal hangup occurs, then the session leader is sent a
+.BR SIGHUP
+signal.
+.PP
+If a process that is a session leader terminates, then a
+.B SIGHUP
+signal is sent to each process in the foreground
+process group of the controlling terminal.
.SH SEE ALSO
.BR setsid (1),
.BR getsid (2),
.BR setpgid (2),
.BR setpgrp (2),
.BR tcgetsid (3),
-.BR credentials (7)
+.BR credentials (7),
+.BR sched (7)