zion - setpgid
Nom
setpgid, getpgid, setpgrp, getpgrp - Fixer / lire le groupe du processus.
Résumé
#include <unistd.h> int setpgid(pid_t pid , pid_t pgid ); pid_t getpgid(pid_t pid ); int setpgrp(void); pid_t getpgrp(void);
Description
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 en cours est utilisé. Si pgid vaut zéro, le PID du processus indiqué par pid est utilisé. 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. 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é. getpgid renvoie l'ID du groupe de processus auquel appartient le processus indiqué par pid . Si pid vaut zéro, le PID du processus en cours est utilisé. L'appel setpgrp () invoque simplement setpgid(0,0) . De même getpgrp est équivalent à getpgid(0) . Chaque groupe de processus est membre d'une session et chaque processus est membre de cette session. Les groupes de processus sont utilisés pour la distribution de signaux, et par les terminaux pour contrôler les requêtes de saisie. Les processus appartenant au même groupe que le terminal sont en avant-plan, et peuvent y lire des données, alors que les autres sont en arrière plan et seront bloqués s'ils tentent de lire des données. Ces appels sont utilisés par des programmes comme csh (1) pour créer des groupes de processus afin d'implémenter le contrôle de jobs. Les appels TIOCGPGRP et TIOCSPGRP décrits dans termios (3) servent à fixer/lire le groupe de processus du terminal de contrôle. Si une session a un terminal de contrôle, CLOCAL n'est pas actif, et une deconnexion se produit, alors le leader de la session recevra 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.
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. getpgid renvoie le groupe du processus s'il réussit ou -1 s'il échoue, et errno contient le code d'erreur. getpgrp retourne toujours le groupe du processus courant.
Erreurs
EINVAL pgid
est inférieur à 0 (setpgid, setpgrp). |
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 (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 corespond à aucun processus. Pour setpgid : pid n'est ni le processus appelant, ni l'un de ses enfants. |
Conformité
Les fonctions setpgid et getpgid sont conformes à POSIX.1. La fonction setpgrp provient de BSD 4.2, et getpgid de SVr4.
Notes
POSIX à défini setpgid à partir de la fonction setpgrp de BSD. Une fonction Système V existe avec le même nom, mais fonctionnant comme setsid (2).
Pour obtenir les prototypes avec la GlibC, définissez à la fois _XOPEN_SOURCE et _XOPEN_SOURCE_EXTENDED ou utilisez un "#define _XOPEN_SOURCE n" avec n supérieur ou égal à 500.
Voir aussi
getuid (2), setsid (2), tcgetpgrp (3), tcsetpgrp (3), termios (3)
Traduction
Christophe Blaess, 1996-2003.
Poster un commentaire