SETPGID(2)

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

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 */
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)

DESCRIPTION
Toutes ces interfaces sont disponibles sous Linux et sont utilisées pour obtenir ou définir l'identifiant de groupe de processus (PGID) d'un processus. Les méthodes préférées, spécifiées par POSIX.1, pour le faire sont : getpgrp(void), pour retrouver le PGID du processus appelant et setpgid() pour définir le PGID d'un processus. 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).

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 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.

ERREURS

EACCES
    On a essayé de modifier 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 modifier 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 argument sont conformes à POSIX.1-2001. 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.

NOTES
Un processus fils créé avec fork(2) hérite du PGID de son père. Le PGID est préservé à travers un execve(2). 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.

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

TRADUCTION

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.