setpgid(2)

NOM
setpgid, getpgid, setpgrp, getpgrp - Définir ou lire le groupe du processus

BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)

SYNOPSIS
#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);

pid_t getpgrp(void);                            /* Version POSIX.1 */
[[obsolète]] pid_t getpgrp(pid_t pid);        /* Version BSD */

int setpgrp(void);                              /* Version System V */
[[obsolète]] int setpgrp(pid_t pid, pid_t pgid);  /* Version BSD */

    Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

getpgid() :
    _XOPEN_SOURCE >= 500
        || /* Depuis la glibc 2.12 : */ _POSIX_C_SOURCE >= 200809L

setpgrp() (POSIX.1) :
    _XOPEN_SOURCE >= 500
"        || /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE
"        || /* glibc <= 2.19 : */ _SVID_SOURCE

setpgrp() (BSD), getpgrp() (BSD) :
    [Ils ne sont disponibles qu'avant la glibc 2.19]
    _BSD_SOURCE &&
        ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
            || _GNU_SOURCE || _SVID_SOURCE)

DESCRIPTION
Toutes ces interfaces sont disponibles sous Linux et sont utilisées pour récupérer et définir l'identifiant du groupe de processus (PGID : « Process Group ID ») d'un processus. La façon préférée, spécifiée par POSIX.1 est : getpgrp(void) pour récupérer le PGID du processus appelant et setpgid() pour définir le PGID d'un processus.

setpgid() définit à pgid le PGID du processus mentionné par pid. Si pid vaut zéro, alors le PID du processus appelant est utilisé. Si pgid vaut zéro, alors le PGID du processus indiqué par pid est positionné à la même valeur que l'identifiant du processus. Si setpgid est utilisé pour déplacer un processus d'un groupe dans un autre (comme cela peut être fait par certains interpréteurs de commandes pour les pipelines), les deux groupes de processus doivent appartenir à la même session (consultez setsid(2) et credentials(7)). Dans ce cas, pgid indique un groupe de processus existant à rejoindre et l'ID de session de ce groupe doit être celui du processus concerné.

La version POSIX.1 de getpgrp(), qui ne prend pas de paramètres, renvoie le PGID du processus appelant.

getpgid() renvoie le PGID du processus indiqué par pid. Si pid vaut zéro, le PID du processus appelant est utilisé. La récupération du PGID d'un processus autre que l'appelant est rarement utilisée et getpgrp() de POSIX.1 est préférée pour cette tâche.

L'appel setpgrp() de System V, qui ne prend pas de paramètres, est équivalent à setpgid(0, 0).

L'appel setpgrp() spécifique à BSD qui prend les paramètres pid et pgid est une fonction d'encapsulation de

    setpgid(pid, pgid)

A partir de la glibc 2.19, la fonction spécifique à BSD setpgrp() ne figure plus dans <unistd.h> ; les appels à cette fonction doivent être remplacés par des appels à setpgid() tel qu'indiqué précédemment.

L'appel getpgrp() spécifique à BSD qui prend un unique paramètre pid est une fonction d'encapsulation de

    getpgid(pid)

A partir de la glibc 2.19, la fonction spécifique à BSD getpgrp() ne figure plus dans <unistd.h> ; les appels à cette fonction doivent être remplacés par des appels à la fonction POSIX.1 getpgrp() qui ne prend pas d'argument (si l'appel a pour objet de récupérer le PGID du processus appelant), ou par des appels à getpgid() tel que décrit précédemment.

VALEUR RENVOYÉE
setpgid() et setpgrp() renvoient zéro s'ils réussissent, ou -1 s'ils échouent, auquel cas errno est positionné pour indiquer l'erreur.

L'appel getpgrp() de POSIX.1 renvoie le PGID du processus appelant.

getpgid() et l'appel spécifique à BSD getpgrp() renvoient le groupe du processus s'ils réussissent. En cas d'erreur, -1 est renvoyé et errno est positionné pour indiquer l'erreur.

ERREURS

EACCES
    On a essayé de changer l'identifiant du groupe de processus d'un des enfants du processus appelant, et l'enfant avait déjà effectué un execve(2) (setpgid(), setpgrp()).

EINVAL
    pgid est inférieur à 0 (setpgid(), setpgrp()).

EPERM
    On a essayé de déplacer un processus dans un groupe d'une session différente, ou de changer le groupe d'un des enfants du processus appelant qui se trouve dans une autre session, ou de modifier le groupe d'un leader de session (setpgid(), setpgrp()).

ESRCH
    Pour getpgid() : pid ne correspond à aucun processus. Pour setpgid() : pid n'est ni le processus appelant, ni l'un de ses enfants.

STANDARDS
setpgid() et la version de getpgrp() sans paramètre sont conformes à POSIX.1-2001.

POSIX.1-2001 spécifie également getpgid() et la version de setpgrp() qui ne prend pas de paramètre. (POSIX.1-2008 marque cette spécification de setpgrp() comme obsolète)

La version de getpgrp() avec un paramètre et la version de setpgrp() qui prend deux paramètres proviennent de 4.2BSD et ne sont pas spécifiées par POSIX.1.

NOTES
Un processus enfant créé par fork(2) hérite du PGID de son parent. Le PGID est conservé au travers d'un execve(2).

Chaque groupe de processus est membre d'une session et chaque processus est membre de cette session (voir credentials(7)).

Une session peut avoir un terminal de contrôle. À tout moment, un (et un seul) des groupes de processus de cette session peut être le groupe de premier plan du terminal ; les autre groupes de processus sont en arrière-plan. Si un signal est généré depuis le terminal (par exemple une touche d'interruption pour générer un SIGINT), ce signal est envoyé au groupe de processus au premier plan. Consultez termios(3) pour la liste des caractères qui génèrent des signaux. Seul le groupe de processus au premier plan peut lire avec read(2) sur le terminal ; si un groupe de processus en arrière-plan essaie de lire avec read(2) sur le terminal, alors le groupe reçoit un signal SIGTTIN, qui le suspend. Les fonctions tcgetpgrp(3) et tcsetpgrp(3) sont utilisées pour récupérer ou positionner le groupe de processus au premier plan du terminal de contrôle.

Les appels setpgid() et getpgrp() sont utilisés par des programmes comme bash(1) pour créer des groupes de processus pour l'implémentation du contrôle des travaux depuis l'interpréteur de commande.

Si la fin du processus rend un groupe de processus orphelin, et si l'un des membres de ce groupe est arrêté, alors un signal SIGHUP suivi d'un signal SIGCONT sera envoyé à tous les processus du groupe orphelin. Un groupe de processus est orphelin si le parent de chaque processus du groupe est soit membre de ce groupe ou soit membre d'un groupe de processus dans une session différente (voyez credentials(7)).

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

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.