BEZEICHNUNG

setsid - erzeugt eine neue Sitzung und setzt die Prozessgruppenkennung

BIBLIOTHEK

Standard-C-Bibliothek ( libc, -lc)

ÜBERSICHT

#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 Sitzungskennung ist die gleiche wie die Prozesskennung). Der aufrufende Prozess wird außerdem zum Führer einer neuen Prozessgruppe in dieser Sitzung (seine Prozessgruppenkennung ist die gleiche wie die Prozesskennung).
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) Sitzungskennung des aufrufenden Prozesses zurückgeliefert. Im Fehlerfall ist der Rückgabewert (pid_t) -1 und errno wird entsprechend gesetzt.

FEHLER

EPERM
Die Prozessgruppenkennung 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.

STANDARDS

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

ANMERKUNGEN

Ein mittels fork(2) erzeugter Kindprozess erbt die Sitzungskennung seines Elternprozesses. Die Sitzungskennung bleibt über einen Aufruf von execve(2) erhalten.
Ein Prozessgruppen-Führer ist ein Prozess, dessen Prozessgruppenkennung und Prozesskennung 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)

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Stefan Janke <[email protected]>, Martin Eberhard Schauer <[email protected]>, Dr. Tobias Quathamer <[email protected]> und Mario Blättermann <[email protected]> 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 die Mailingliste der Übersetzer

Recommended readings

Pages related to setsid you should read also: