SETPGID(2)

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

SYNOPSIS
#include <sys/types.h>
#include <unistd.h>

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

pid_t getpgrp(void); /* version POSIX.1 */
pid_t getpgrp(pid_t pid); /* BSD version */

int setpgrp(void); /* version System V */
int setpgrp(pid_t pid, pid_t pgid); /* BSD version */

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

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

setpgrp() (POSIX.1) :
    _XOPEN_SOURCE >= 500
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc versions <= 2.19: */ _SVID_SOURCE

setpgrp() (BSD), getpgrp() (BSD):
    [These are available only before 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, celle 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 shell 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ètre, 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() est préférée pour cette tâche.

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

The BSD-specific setpgrp() call, which takes arguments pid and pgid, is a wrapper function that calls

    setpgid(pid, pgid)

A partir de 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 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 contient le code d'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'il réussit. En cas d'erreur -1 est renvoyé et errno contient le code d'erreur.

ERREURS

EACCES
    On a essayé de changer le groupe de processus d'un enfant du processus appelant, et ce fils a 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 fils 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.

CONFORMITÉ
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 provient de BSD 4.2 et ne sont pas spécifiées par POSIX.1.

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

Each process group is a member of a session and each process is a member of the session of which its process group is a member. (See 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 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.

If the termination of a process causes a process group to become orphaned, and if any member of the newly orphaned process group is stopped, then a SIGHUP signal followed by a SIGCONT signal will be sent to each process in the newly orphaned process group. An orphaned process group is one in which the parent of every member of process group is either itself also a member of the process group or is a member of a process group in a different session (see also credentials(7)).

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

COLOPHON
Cette page fait partie de la publication 5.08 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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> et Frédéric Hantrais <fhantrais@gmail.com> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 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>.