int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
pid_t getpgrp(void); /* Version POSIX.1 */
pid_t getpgrp(psid_t pid);
/* Version BSD */
int setpgrp(void); /* Version System V */
int setpgrp(pid_t pid, pid_t pgid);
/* Version BSD */
Exigences de macros de test de fonctionnalités pour la glibc (voir feature_test_macros(7)):
getpgid() :
_XOPEN_SOURCE >= 500
setpgrp() :
(POSIX.1) : _SVID_SOURCE || _XOPEN_SOURCE >= 500
setpgrp() (BSD), getpgrp() (BSD) : _BSD_SOURCE && ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE || _XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)
setpgid() fixe à pgid l'ID du groupe de processus auquel appartient le processus mentionné par pid. Si pid vaut zéro, le PID du processus appelant est utilisé. Si pgid vaut zéro, le PGID du processus indiqué par pid devient le même que son PID. Si setpgid() est utilisé pour déplacer un processus d'un groupe dans un autre (comme cela peut être fait par certains shells pour les pipelines), les deux groupes de processus doivent appartenir à la même session (voir 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 d'argument, renvoie le PGID du processus appelant.
getpgid() renvoie l'ID du groupe de processus auquel appartient le processus indiqué par pid. Si pid vaut zéro, le PID du processus appelant est utilisé. (Retrouver le PGID d'un processus autre que l'appelant est rarement nécessaire et l'appel POSIX.1 getpgrp() est préférable pour cette tâche.)
L'appel setpgrp() de style System V, qui ne prend pas d'argument, est équivalent à setpgid(0, 0).
L'appel setpgrp() spécifique à BSD, qui prend les arguments pid et pgid, est équivalent à setpgid(pid, pgid).
L'appel getpgrp() spécifique à BSD, qui prend un argument pid unique, est équivalent à getpgid(pid).
L'appel getpgrp() de POSIX.1 renvoie toujours le PGID de l'appelant.
Les appels getpgid(), et getpgrp(), spécifiques BSD, renvoient le groupe de processus s'ils réussissent ou -1 s'ils échouent, et errno contient le code d'erreur.
POSIX.1-2001 spécifie également getpgid() et la version de setpgrp() qui ne prend pas d'argument.
La version de getpgrp() avec un argument et la version de setpgrp() qui prend deux arguments sont dérivées de BSD 4.2 et ne sont pas spécifiées par POSIX.1.
Chaque groupe de processus est membre d'une session et chaque processus est membre de la session dont le groupe de processus est membre.
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 processus d'avant-plan du terminal ; les autres groupes de processus sont en arrière-plan. Si un signal est généré depuis le terminal (par exemple, l'appui sur une touche d'interruption pour générer un SIGINT), ce signal est envoyé au groupe de processus d'avant-plan. (Voir termios(3) pour une liste des caractères qui génèrent les signaux.) Seul le groupe de processus d'avant-plan peut effectuer une lecture (read(2)) sur le terminal ; si un groupe de processus d'arrière-plan essaye d'effectuer une lecture read(2) sur le terminal, le groupe recevra un signal SIGTSTP qui le suspendra. Les fonctions tcgetpgrp(3) et tcsetpgrp(3) sont utilisées pour obtenir et définir le groupe de processus d'avant-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 tâches depuis l'interpréteur de commande.
Si une session a un terminal de contrôle, que l'attribut CLOCAL pour ce terminal n'est pas positionné et qu'une déconnexion se produit, alors le leader de la session recevra un signal SIGHUP. Si le leader se termine, le signal SIGHUP sera envoyé à tous les processus du groupe en avant-plan sur le terminal de contrôle.
Si la fin du processus rend un groupe orphelin, et si l'un des membres de ce groupe est arrêté, alors un signal SIGHUP suivi de SIGCONT sera envoyé à tous les processus du groupe.
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 15 octobre 1996 et révisée le 23 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 setpgid ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 23 juin 2008