setsid(2) | System Calls Manual | setsid(2) |
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-2008.
GESCHICHTE
POSIX.1-2001, 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 <gonzo@burg.studfb.unibw-muenchen.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Dr. Tobias Quathamer <toddy@debian.org> und Mario Blättermann <mario.blaettermann@gmail.com> 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.
2. Mai 2024 | Linux man-pages 6.8 |