BEZEICHNUNG¶
setpgid, getpgid, setpgrp, getpgrp - Prozessgruppe setzen/holen
ÜBERSICHT¶
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
pid_t getpgrp(void); /* POSIX.1-Version */
pid_t getpgrp(pid_t pid); /* BSD-Version */
int setpgrp(void); /* System-V-Version */
int setpgrp(pid_t pid, pid_t pgid); /*
BSD-Version */
Mit Glibc erforderliche Makros (siehe
feature_test_macros(7)):
getpgid():
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
setpgrp() (POSIX.1):
_SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
setpgrp() (BSD),
getpgrp() (BSD):
_BSD_SOURCE &&
! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE ||
_XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)
BESCHREIBUNG¶
Alle diese Schnittstellen sind unter Linux verfügbar. Sie werden für
das Ermitteln und Setzen der Prozessgruppen-ID (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() für das Setzen der PGID eines Prozesses.
setpgid() setzt die PGID des Prozesses
pid auf
pgid. Falls
die
pid gleich Null ist, wird die Prozess-ID des aufrufenden Prozesses
verwendet. Falls die
pgid gleich Null ist, wird PGID des Prozesses
pid auf seine Prozess-ID gesetzt. Wenn
setpgid() verwendet wird
um einen Prozess von einer Prozessgruppe in eine andere zu verschieben (wie
das manche Shells tun, wenn Sie Pipelines erzeugen), müssen 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
Sitzungs-ID dieser Gruppe muss mit der Sitzungs-ID des wechselnden Prozesses
übereinstimmen.
Die POSIX.1-Version von
getpgrp() erwartet kein Argument und liefert die
PGID des aufrufenden Prozesses zurück.
getpgid() gibt die PGID des Prozesses
pid zurück. Falls
pid gleich Null ist, wird die Prozess-ID des aufrufenden Prozesses
verwendet. (Die Ermittlung einer PGID eines anderen Prozesses als des
aufrufenden ist selten erforderlich. Für diese Aufgabe wird die
POSIX.1-Version von
getpgrp() bevorzugt.)
Das System-V-artige
setpgrp() erwartet kein Argument und ist
äquivalent zu
setpgid(0, 0).
Der BSD-spezifische
setpgrp()-Aufruf erwartet die Argumente
pid
und
pgid und ist zu
setpgid(pid, pgid) äquivalent.
Der BSD-spezifische
getpgrp()-Aufruf erwartet ein einzelnes Argument
pid und ist zu
getpgid(pid) äquivalent.
RÜCKGABEWERT¶
Bei Erfolg geben
setpgid() und
setpgrp() Null zurück. Bei
einem Fehler wird -1 zurückgegeben und
errno entsprechend gesetzt.
Der POSIX.1-
getpgrp() gibt immer die PGID des Aufrufenden zurück.
getpgid() und das BSD-spezifische
getpgrp() geben bei Erfolg immer
eine Prozessgruppe zurück. Bei einem Fehler wird -1 zurückgegeben
und
errno entsprechend gesetzt.
FEHLER¶
- EACCES
- Es wurde versucht, die Prozessgruppen-ID eines der Kinder
des aufrufenden Prozesses zu ändern und das Kind hat bereits ein
execve(2) durchgeführt ( 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 Prozessgruppen-ID eines der
Kinder des aufrufenden Prozesses zu ändern und das Kind war in einer
anderen Sitzung oder die Prozessgruppen-ID eines »session
leaders« zu ändern ( setpgid(), setpgrp()).
- ESRCH
- Für getpgid(): pid passt auf keinen
Prozess. Für setpgid(): pid ist nicht der aufrufende
Prozess und kein Kind des aufrufenden Prozesses.
setpgid() und die Version von
getpgrp() ohne Argumente sind zu
POSIX.1-2001 konform.
POSIX.1-2001 spezifiziert auch
getpgid() und die Version von
setpgrp(), die kein Argument akzeptiert. (In POSIX.1-2008 ist diese
setpgrp()-Spezifikation als obsolet markiert.)
Die Version von
getpgrp() mit einem Argument und die Version von
setpgrp, die zwei Argumente akzeptiert, stammen von 4.2BSD ab und sind
nicht in POSIX.1 spezifiziert.
ANMERKUNGEN¶
Ein mittels
fork(2) erstelltes Kind erbt die Prozessgruppen-ID der
Eltern. Die PGID wird über ein
execve(2) hinweg erhalten.
Jede Prozessgruppe ist Teilnehmer einer Sitzung und jeder Prozess ist Teilnehmer
der Sitzung, an der seine Prozessgruppe teilnimmt.
Einer Sitzung kann ein steuerndes Terminal zugeordnet seit. Zu jeder Zeit kann
eine (und nur eine) der Prozessgruppen die Vordergrund-Prozessgruppe für
das Terminal sein; die verbleibenden Prozessgruppen sind im Hintergrund. Falls
vom Terminal ein Signal erzeugt wird (z. B. die Betätigung der
Unterbrechungstaste, um ein
SIGINT zu bewirken), wird dieses Signal an
die Vordergrund-Prozessgruppe gesendet. (Siehe
termios(3) für 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 eine Sitzung über ein steuerndes Terminal verfügt und der
Schalter
CLOCAL für dieses Terminal nicht gesetzt ist und sich das
Terminal aufhängt, wird ein
SIGHUP an den »Session
Leader« gesendet. Falls der Session Leader sich beendet, wird auch an
alle Prozesse in der Vordergrund-Prozessgruppe dieses Terminals ein
SIGHUP-Signal gesendet.
Falls die Beendigung des Prozesses eine Prozessgruppe verwaisen lässt 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 die Eltern 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)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net>, Helge Kreutzmann <debian@helgefjell.de> und Martin
Eberhard Schauer <Martin.E.Schauer@gmx.de> 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>.