setsid(2)

НАИМЕНОВАНИЕ
setsid - создает сеанс и устанавливает идентификатор группы процесса

БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)

ОБЗОР
#include <unistd.h>

pid_t setsid(void);

ОПИСАНИЕ
Вызов setsid() создаёт новый сеанс, если вызывающий процесс не является лидером группы процессов. Вызывающий процесс становится лидером нового сеанса (то есть, его ID сеанса становится равным ID самого процесса). Вызывающий процесс также становится лидером группы процессов новой группы процессов в сеансе (то есть, его ID группы процессов становится равным ID самого процесса).

Вызывающий процесс будет единственным в новой группе процессов и новом сеансе.

Изначально, новый сеанс не имеет управляющего терминала. О том, как сеанс получает управляющий терминал, смотрите в credentials(7).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается идентификатор (нового) сеанса вызывающего процесса. В случае ошибки возвращается (pid_t) -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

EPERM
    Идентификатор группы процессов любого процесса равен PID вызывающего процесса. В этом случае, в частности, setsid() завершается неудачно, если вызывающий процесс уже является лидером группы процессов.

СТАНДАРТЫ
POSIX.1-2008.

ИСТОРИЯ
POSIX.1-2001, SVr4.

ПРИМЕЧАНИЯ
Потомок, создаваемый с помощью fork(2), наследует ID сеанса своего родителя. Идентификатор сеанса сохраняется при вызове execve(2).

Лидер группы процессов — это процесс, идентификатор группы процессов которого равен идентификатору самого процесса (PID). Отказ лидера группы процессов выполнять setsid() предотвращает возможность того, что сам лидер группы процессов переместится в новый сеанс, в то время как другие процессы в группе останутся в первоначальном сеансе; это поломало бы жёсткую двухуровневую иерархию сценариев и групп процессов. Для того, чтобы setsid() выполнился успешно, вызовите fork(2) и в родителе _exit(2), а затем в дочернем процессе (который по определению не может быть лидером группы процессов) вызовите setsid().

Если сеанс имеет управляющий терминал, у которого не установлен флаг CLOCAL и возникает зависание (hangup) терминала, то лидеру сеанса посылается SIGHUP.

Если завершается процесс, который является лидером сеанса, то сигнал SIGHUP посылается каждому процессу в приоритетной (foreground) группе процессов управляющего терминала.

СМОТРИТЕ ТАКЖЕ
setsid(1), getsid(2), setpgid(2), setpgrp(2), tcgetsid(3), credentials(7), sched(7)

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).