SETSID(2)

BEZEICHNUNG
setsid - erzeugt eine neue Sitzung und setzt die Prozessgruppen-ID

ÜBERSICHT
#include <sys/types.h>
#include <unistd.h>

pid_t setsid(void);

BESCHREIBUNG
setsid() erzeugt eine neue Sitzung, wenn der aufrufende Prozess kein Prozessgruppen-Führer ist. Der aufrufende Prozess wird dann Führer der neuen Sitzung (seine Sitzungs-ID ist die gleiche wie die Prozess-ID). Der aufrufende Prozess wird außerdem zum Führer einer neuen Prozessgruppe in dieser Sitzung (seine Prozessgruppen-ID ist die gleiche wie die Prozess-ID).

Der aufrufende Prozess wird der einzige Prozess in der neuen Prozessgruppe und der neuen Sitzung sein.

Anfänglich hat die neue Sitzung kein steuerndes Terminal. Für Details darüber, wie eine Sitzung ein steuerndes Terminal erlangt, siehe credentials(7).

RÜCKGABEWERT
Bei Erfolg wird die (neue) Sitzungs-ID des aufrufenden Prozesses zurückgeliefert. Im Fehlerfall ist der Rückgabewert (pid_t) -1 und errno wird entsprechend gesetzt.

FEHLER

EPERM
    Die Prozessgruppen-ID irgendeines Prozesses der Prozessgruppe ist die PID des aufrufenden Prozesses. Somit schlägt der Aufruf von setsid() insbesondere dann fehl, wenn der aufrufende Prozess bereits ein Prozessgruppen-Führer ist.

KONFORM ZU
POSIX.1-2001, POSIX.1-2008, SVr4.

ANMERKUNGEN
Ein mittels fork(2) erzeugter Kindprozess erbt die Sitzungs-ID seines Elternprozesses. Die Sitzungs-ID bleibt über einen Aufruf von execve(2) erhalten.

Ein Prozessgruppen-Führer ist ein Prozess, dessen Prozessgruppen-ID und Prozess-ID gleich sind. Wenn einem Prozessgruppen-Führer verboten wird, setsid() aufzurufen, wird auch verhindert, dass der Prozessgruppen-Führer sich selbst in einer neuen Sitzung platziert, während andere Prozesse in der Prozessgruppe in ihrer Originalsitzung verbleiben. Solch ein Szenario würde die strikte zweistufige Hierarchie von Sitzungen und Prozessgruppen verletzen. Um sicher zu stellen, dass setsid() funktioniert, rufen Sie fork(2) auf und lassen Sie den Elternprozess _exit(2) ausführen, während das Kind (das bei Definition kein Prozessgruppenleiter sein kann) setsid() aufruft.

Falls eine Sitzung ein steuerndes Terminal hat und der Schalter CLOCAL für dieses Terminal nicht gesetzt ist und das Terminal aufhängt, dann wird dem Sitzungsleitenden ein Signal SIGHUP gesandt.

Falls ein Prozess, der ein Sitzungsleitender ist, sich beendet, dann wird ein Signal SIGHUP an jeden Prozess in der Vordergrundprozessgruppe des steuernden Terminals gesandt.

SIEHE AUCH
setsid(1), getsid(2), setpgid(2), setpgrp(2), tcgetsid(3), credentials(7), sched(7)

KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Stefan Janke <gonzo@burg.studfb.unibw-muenchen.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Dr. Tobias Quathamer <toddy@debian.org> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.