Scroll to navigation

getpgid(2) System Calls Manual getpgid(2)

NAAM

setpgid, getpgid, setpgrp, getpgrp - zet/krijg proces groep

BIBLIOTHEEK

Standard C bibliotheek (libc, -lc)

SAMENVATTING

#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
pid_t getpgrp(void);                 /* POSIX.1 versie */
[[afgekeurd]] pid_t getpgrp(pid_t pid);            /* BSD versie */
int setpgrp(void);                   /* System V versie */
[[afgekeurd]] int setpgrp(pid_t pid, pid_t pgid);  /* BSD versie */

Feature Test Macro´s eisen in glibc (zie feature_test_macros(7)):

getpgid():


_XOPEN_SOURCE >= 500
|| /* Sinds glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

setpgrp() (POSIX.1):


_XOPEN_SOURCE >= 500
|| /* Vanaf glibc 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE

setpgrp() (BSD), getpgrp() (BSD):


[Deze zijn alleen beschikbaar voor glibc 2.19]
_BSD_SOURCE &&
! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
|| _GNU_SOURCE || _SVID_SOURCE)

BESCHRIJVING

Al deze interfaces zijn beschikbaar op Linux, en worden gebruikt voor het verkrijgen en zetten van de proces groep ID (PGID) van een proces. De voorkeur manieren, POSIX.1-gespecificeerde, om dit te doen zijn: getpgrp(void), om het PGID van het huidige proces te verkrijgen en setpgid(), voor het zetten van het PGID van het proces.

setpgid() zet het PGID van het proces opgegeven in pid naar pgid. Als pid nul is wordt het proces ID van het huidige proces gebruikt. Als pgid nul is wordt het proces ID van het proces opgegeven in pid gebruikt. Als setpgid gebruikt wordt om een proces van een proces groep naar een andere te verplaatsen (zoals gedaan wordt door sommige shells bij het maken van pijpen), dan moeten beide proces groepen onderdeel van dezelfde sessie zijn (zie setsid(2) en credentials(7)). In dit geval bepaald de pgid een bestaande proces groep waarbij aangesloten zal worden en het sessie ID van die groep moet overeenkomen met de sessie ID van de aansluitende groep.

De POSIX.1 versie van getpgrp(), die geen argument nodig heeft, retourneert de PGID van het aanroepende proces.

getpgid() retourneert het PGID van het proces opgegeven in pid. Als pid nul is dan wordt het proces ID van het huidige proces gebruikt. (Opvragen van PGID van een proces anders dan van de aanroeper is zelden nodig, en POSIX.1 getpgrp() wordt geprefereerd voor deze taak.)

De System V-stijl setpgrp(), die geen argument nodig heeft, is equivalent aan setpgid(0, 0).

De BSD-specifieke setpgrp() aanroep, die de argumenten pid en pgid nodig heeft, is een omwikkel functie die


setpgid(pid, pgid)

Vanaf glibc 2.19, wordt de BSD-specifieke setpgrp() functie niet langer blootgegeven door <unistd.h>; aanroepen dienen te worden vervangen met de setpgid() aanroep zoals hierboven getoond.

De BSD-specifieke setpgrp() aanroep, die de argumenten pid en pgid nodig heeft, is een omwikkel functie die


getpgid(pid)

Vanaf glibc 2.19, wordt de BSD-specifieke setpgrp() functie niet langer blootgegeven door <unistd.h>; aanroepen dienen te worden vervangen met de setpgid() aanroep zoals hierboven getoond.

EIND WAARDE

Bij success wordt door setpgid() en setpgrp() nul teruggegeven. Bij falen wordt -1 teruggegeven, en wordt errno overeenkomstig gezet.

De POSIX.1 getpgrp() retourneert altijd het PGID van de aanroeper.

getpgid(), en het BSD-specifieke getpgrp() retourneren een proces groep bij slagen. Bij falen wordt -1 teruggegeven en wordt errno overeenkomstig gezet.

FOUTEN

Een poging werd gedaan om de proces groep ID van een van de kinderen van het huidige proces te veranderen en het kind heeft al een een execve(2) uitgevoerd (setpgid(), setpgrp()).
pgid is minder dan 0 (setpgid(), setpgrp()).
Een poging werd gedaan om een proces te verplaatsen naar een proces groep in een andere sessie, of om de proces groep ID te veranderen van een van de kinderen van het aanroepende proces en het kind zat in een andere sessie, of om de proces groep ID te veranderen een een sessie leider (setpgid(), setpgrp()).
De doel proces groep bestaat niet. (setpgid(), setpgrp()).
Voor getpgid(): pid kwam niet overeen met enig proces.

VOLDOET AAN

POSIX.1-2008 (maar zie GESCHIEDENIS).
Geen.

GESCHIEDENIS

POSIX.1-2001.
POSIX.1-2001, POSIX.1-2008 markeert het als verouderd.
4.2BSD.

OPMERKINGEN

Een kind gecreëerd met fork(2) erft de PGID van zijn ouder. DE PGID wordt bewaard langs een execve(2).

Elke proces groep is lid van een sessie en elk proces is lid van een sessie waarvan zijn proces groep een lid is. (Zie credentials(7).)

Een proces kan een controlerende terminal hebben. Op elk moment, een (en alleen een) van de proces groepen in een sessie kan de voorgrond proces groep van een terminal zijn; de overblijvende proces groepen zijn in de achtergrond. Als een signaal werd gegenereerd vanaf een terminal (b.v. bedienen van de onderbreking toets om SIGINT() te genereren, dan wordt dit signaal verzonden naar de voorgrond proces groep. (zie termios(3) voor een beschrijving van de tekens die signalen genereren.) Alleen de voorgrond proces groep mag read(2) van de terminal; als een achtergrond proces groep probeert te read(2) lezen van de terminal, dan wordt aan de groep een SIGTTIN() signaal verstuurd, dat het opschort. De tcgetpgrp(3) en tcsetpgrp(3) functies worden gebruikt om het voorgrond proces van de controlerende terminal te krijgen/zetten.

De setpgid() en getpgrp() aanroepen worden gebruikt door programma´s als bash(1) om proces groepen aan te maken om op die manier job control te implementeren.

Als het beëindigen van een proces veroorzaakt dat een proces groep wordt verweesd, en als enig lid van de nieuw verweesde proces groep wordt gestopt, dan zal een SIGHUP signaal gevolgd door een SIGCONT signaal worden verzonden naar elk proces in de nieuwe verweesde proces groep. Een verweesde proces groep is er een in welke de ouder van elk lid van de proces groep is ofwel zelf ook een lid van de proces groep of is een lid van een proces groep in een andere sessie (zie ook credentials(7)).

ZIE OOK

getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7)

VERTALING

De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

2 mei 2024 Linux man-pages 6.8