Scroll to navigation

setsid(2) System Calls Manual setsid(2)

ИМЯ

setsid - создает сеанс и устанавливает идентификатор группы процесса

LIBRARY

Standard C library (libc, -lc)

СИНТАКСИС

#include <unistd.h>
pid_t setsid(void);

ОПИСАНИЕ

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

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

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

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается идентификатор (нового) сеанса вызывающего процесса. В случае ошибки возвращается (pid_t) -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Идентификатор группы процессов любого процесса равен 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>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

30 марта 2023 г. Linux man-pages 6.05.01