setpgid(2) System Calls Manual setpgid(2) BEZEICHNUNG setpgid, getpgid, setpgrp, getpgrp - Prozessgruppe setzen/holen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); pid_t getpgrp(void); /* POSIX.1-Version */ [[veraltet]] pid_t getpgrp(pid_t pid); /* BSD-Version */ int setpgrp(void); /* System-V-Version */ [[veraltet]] int setpgrp(pid_t pid, pid_t pgid); /* BSD-Version */ Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): getpgid(): _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L setpgrp() (POSIX.1): _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.19: */ _DEFAULT_SOURCE || /* Glibc <= 2.19: */ _SVID_SOURCE setpgrp() (BSD), getpgrp() (BSD): [Diese sind nur in Glibc vor 2.19 verfugbar] _BSD_SOURCE && ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE || _GNU_SOURCE || _SVID_SOURCE) BESCHREIBUNG Alle diese Schnittstellen sind unter Linux verfugbar. Sie werden fur das Ermitteln und Setzen der Prozessgruppenkennung (PGID) eines Prozesses verwendet. Die bevorzugten, in POSIX.1 spezifizierten Arten dies zu erledigen sind: getpgrp(void) zum Ermitteln der PGID des aufrufenden Prozesses und setpgid() fur das Setzen der PGID eines Prozesses. setpgid() setzt die PGID des Prozesses pid auf pgid. Falls die pid gleich Null ist, wird die Prozesskennung des aufrufenden Prozesses verwendet. Falls die pgid gleich Null ist, wird PGID des Prozesses pid auf seine Prozesskennung gesetzt. Wenn setpgid() verwendet wird, um einen Prozess von einer Prozessgruppe in eine andere zu verschieben (wie das manche Shells tun, wenn sie Pipes erzeugen), mussen beide Prozessgruppen Teil der gleichen Sitzung sein (siehe setsid(2) und credentials(7)). In diesem Fall gibt die pgid einer bestehende Prozessgruppe an, deren Mitgliedschaft erworben werden soll, und die Sitzungskennung dieser Gruppe muss mit der Sitzungskennung des wechselnden Prozesses ubereinstimmen. Die POSIX.1-Version von getpgrp() erwartet kein Argument und liefert die PGID des aufrufenden Prozesses zuruck. getpgid() gibt die PGID des Prozesses pid zuruck. Falls pid gleich Null ist, wird die Prozesskennung des aufrufenden Prozesses verwendet. (Die Ermittlung einer PGID eines anderen Prozesses als des aufrufenden ist selten erforderlich. Fur diese Aufgabe wird die POSIX.1-Version von getpgrp() bevorzugt.) Das System-V-artige setpgrp() erwartet kein Argument und ist aquivalent zu setpgid(0, 0). Der BSD-spezifische setpgrp()-Aufruf erwartet die Argumente pid und pgid und ruft Folgendes auf: setpgid(pid, pgid) Seit Glibc 2.19 wird die BSD-spezifische Funktion setpgrp() nicht mehr in verwendet. Aufrufe sollten durch den setpgid()-Aufruf ersetzt werden, wie oben gezeigt. Der BSD-spezifische getpgrp()-Aufruf erwartet ein einzelnes Argument pid und ruft Folgendes auf: getpgid(pid) Seit Glibc 2.19 wird die BSD-spezifische Funktion getpgrp() nicht mehr in verwendet. Aufrufe sollten durch das POSIX-konforme getpgrp() ersetzt werden, welches keine Argumente akzeptiert (falls beabsichtigt ist, die PGID des Aufrufenden zu ermitteln), oder mit dem getpgid()-Aufruf, wie oben gezeigt. RUCKGABEWERT Bei Erfolg geben setpgid() und setpgrp() Null zuruck. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. Der POSIX.1-getpgrp() gibt immer die PGID des Aufrufenden zuruck. getpgid() und das BSD-spezifische getpgrp() geben bei Erfolg immer eine Prozessgruppe zuruck. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER EACCES Es wurde versucht, die Prozessgruppenkennung eines der Kinder des aufrufenden Prozesses zu andern und das Kind hat bereits ein execve(2) durchgefuhrt (setpgid(), setpgrp()). EINVAL pgid ist kleiner als 0 (setpgid(), setpgrp()). EPERM Es wurde versucht, einen Prozess in eine Prozessgruppe in einer anderen Sitzung zu verschieben oder die Prozessgruppenkennung eines der Kinder des aufrufenden Prozesses zu andern und das Kind war in einer anderen Sitzung oder die Prozessgruppenkennung eines >>session leaders<< zu andern (setpgid(), setpgrp()). EPERM Die Ziel-Prozessgruppe existiert nicht. (setpgid(), setpgrp()). ESRCH Fur getpgid(): pid passt auf keinen Prozess. Fur setpgid(): pid ist nicht der aufrufende Prozess und kein Kind des aufrufenden Prozesses. STANDARDS getpgid() setpgid() getpgrp() (keine Argumente) setpgrp() (keine Argumente) POSIX.1-2008 (aber siehe GESCHICHTE). setpgrp() (2 Argumente) getpgrp() (1 Argument) Keine. GESCHICHTE getpgid() setpgid() getpgrp() (keine Argumente) POSIX.1-2001. setpgrp() (keine Argumente) POSIX.1-2001. POSIX.1-2008 markiert es als obsolet. setpgrp() (2 Argumente) getpgrp() (1 Argument) 4.2BSD. ANMERKUNGEN Ein mittels fork(2) erstelltes Kind erbt die Prozessgruppenkennung des Elternprozesses. Die PGID wird uber ein execve(2) hinweg erhalten. Jede Prozessgruppe ist Teilnehmer einer Sitzung und jeder Prozess ist Teilnehmer der Sitzung, an der seine Prozessgruppe teilnimmt. (Siehe credentials(7).) Einer Sitzung kann ein steuerndes Terminal zugeordnet sein. Zu jeder Zeit kann eine (und nur eine) der Prozessgruppen die Vordergrund-Prozessgruppe fur das Terminal sein; die verbleibenden Prozessgruppen sind im Hintergrund. Falls vom Terminal ein Signal erzeugt wird (z. B. die Betatigung der Unterbrechungstaste, um ein SIGINT zu bewirken), wird dieses Signal an die Vordergrund-Prozessgruppe gesendet. (Siehe termios(3) fur eine Beschreibung der Zeichen, die Signale erzeugen.) Nur die Vordergrund-Prozessgruppe kann vom Terminal lesen (mittels read(2)); wenn das eine Hintergrund-Prozessgruppe versucht, wird an sie ein SIGTSTP-Signal gesendet, das sie >>in den Zwangsurlaub schickt<<. Die Funktionen tcgetpgrp(3) und tcsetpgrp(3) werden verwendet, um die Vordergrund-Prozessgruppe des steuernden Terminals zu ermitteln oder zu setzen. Die Systemaufrufe setpgid() und getpgrp() werden von Programmen wie der bash(1) zur Erzeugung von Prozessgruppen verwendet, um die Shell-Jobs zu steuern. Falls die Beendigung eines Prozesses eine Prozessgruppe verwaisen lasst und wenn jedes Mitglied der neu verwaisten Prozessgruppe gestoppt wird, wird ein SIGHUP-Signal gefolgt von einem SIGCONT-Signal an jeden Prozess in der neu verwaisten Prozessgruppe gesendet werden. Eine verwaiste Prozessgruppe ist eine, in denen der Elternprozess eines jeden Mitglieds der Prozessgruppe entweder selbst auch Mitglied der Prozessgruppe oder Mitglied einer Prozessgruppe in einer anderen Sitzung sind (siehe auch credentials(7)). SIEHE AUCH getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother , Helge Kreutzmann , Martin Eberhard Schauer und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 setpgid(2)