setsid(2)

NAZWA
setsid - tworzy sesję i ustawia identyfikator grupy procesu

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <unistd.h>

pid_t setsid(void);

OPIS
setsid() tworzy nową sesję, jeśli wywołujący proces nie jest liderem grupy procesów. Wywołujący proces jest liderem nowej sesji (tj. jego identyfikator sesji będzie taki sam, jak jego identyfikator procesu). Proces wywołujący staje się również liderem grupy procesów nowej grupy procesu w sesji (tj. jego identyfikator grupy procesu będzie taki sam, jak jego identyfikator procesu).

Proces wywołujący będzie jedynym procesem w nowej grupie procesu i w nowej sesji.

Początkowo, nowa sesja nie ma terminala sterującego. Szczegóły o pozyskaniu terminala sterującego przez sesję opisano w podręczniku credentials(7).

WARTOŚĆ ZWRACANA
W przypadku powodzenia zwracany jest (nowy) identyfikator sesji procesu wywołującego. W razie wystąpienia błędu zwracane jest (pid_t) -1 i ustawiane jest errno, wskazując błąd.

BŁĘDY

EPERM
    Identyfikator grupy procesu dowolnego procesu równa się PID-owi procesu wywołującego. Dlatego, w szczególności, setsid() zawodzi, jeśli proces wywołujący jest już liderem grupy procesów.

STANDARDY
POSIX.1-2024.

HISTORIA
POSIX.1-2001, SVr4.

UWAGI
Potomek utworzony przez fork(2) dziedziczy identyfikator sesji od swojego rodzica. Wartość identyfikatora sesji jest także zachowywana podczas execve(2).

Liderem grupy procesów jest proces, którego identyfikator grupy procesu równa się jego PID-owi. Odmowa wywołania setsid() dla lidera grupy procesów ma na celu zapobieżenie ewentualności, gdy lider grupy procesów umieściłby się w nowej sesji, podczas gdy inne procesy w jego grupie procesów pozostałyby w pierwotnej sesji; taki scenariusz przełamałby ścisłą, dwupoziomową hierarchię sesji i grup procesów. Aby zapewnić, że setsid() się powiedzie, należy wywołać fork(2) i dokonać _exit(2) przez rodzica, podczas gdy potomek (który z definicji nie może być liderem grupy procesów) wywoła setsid().

Jeśli sesja ma terminal sterujący, a znacznik CLOCAL dla tego terminala nie jest ustawiony i wystąpi rozłączenie terminala, to lider sesji otrzyma sygnał SIGHUP.

Jeśli proces, który jest liderem sesji zakończy się, to sygnał SIGHUP jest wysyłany do każdego procesu w pierwoszoplanowej grupie procesów terminala sterującego.

ZOBACZ TAKŻE
setsid(1), getsid(2), setpgid(2), setpgrp(2), tcgetsid(3), credentials(7), sched(7)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.