setsid - erzeugt eine neue Sitzung und setzt die Prozessgruppenkennung
Standard-C-Bibliothek (
libc,
-lc)
#include <unistd.h>
pid_t setsid(void);
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).
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.
- 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.
POSIX.1-2001, POSIX.1-2008, SVr4.
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.
setsid(1),
getsid(2),
setpgid(2),
setpgrp(2),
tcgetsid(3),
credentials(7),
sched(7)
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