Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       setpgid, getpgid, setpgrp, getpgrp - устанавливает/получает группу процессов

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <unistd.h>

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

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

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

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       getpgid():
           _XOPEN_SOURCE >= 500
               || /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

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

       setpgrp() (BSD), getpgrp() (BSD):
           [Доступно только в версиях glibc до 2.19]
           _BSD_SOURCE &&
               ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
                   || _GNU_SOURCE || _SVID_SOURCE)

ОПИСАНИЕ

       Все  перечисленные  интерфейсы  доступны  в Linux и используются для получения и установки
       идентификатора группы процессов  (PGID).  Предпочтительней  использовать  версию  POSIX.1:
       getpgrp(void)  —  для  получения PGID вызывающего процесса; setpgid() — для установки PGID
       вызывающего процесса.

       Вызов setpgid() устанавливает PGID у процесса с  идентификатором  pid  равным  pgid.  Если
       значение  pid  равно  0, то используется идентификатор вызывающего процесса. Если значение
       pgid равно 0, то PGID процесса, указанного в pid,  становится  равным  его  идентификатору
       процесса.  Если setpgid() используется для перевода процесса из одной группы в другую (это
       делают некоторые оболочки командной строки для  объединения  каналов  процессов),  то  обе
       группы процессов должны быть частью одного сеанса (см. setsid(2) и credentials(7)). В этом
       случае в pgid указывается существующая группа процессов, в которую нужно выполнить перевод
       и  идентификатор сеанса этой группы должен совпадать с идентификатором сеанса переводимого
       процесса.

       В версии POSIX.1 вызов getpgrp() без аргументов возвращает PGID вызывающего процесса.

       Вызов getpgid() возвращает PGID процесса с заданным pid. Если значение pid равно нулю,  то
       используется  идентификатор  вызывающего  процесса  (получение PGID процесса, отличного от
       вызывающего, требуется редко, а для этой задачи хорошо подходит POSIX.1 getpgrp()).

       В версии System V вызов setpgrp() без аргументов эквивалентен setpgid(0, 0).

       В версии BSD вызов setpgrp() с  аргументами  pid  и  pgid  является  обёрточной  функцией,
       которая вызывает

           setpgid(pid, pgid)

       Начиная с glibc 2.19, BSD-функция setpgrp() была удалена из <unistd.h>; вызовы должны быть
       заменены на вызов setpgid(), как показано выше.

       В версии BSD вызов getpgrp()  с  аргументом  pid  является  обёрточной  функцией,  которая
       вызывает

           getpgid(pid)

       Начиная с glibc 2.19, BSD-функция getpgrp() была удалена из <unistd.h>; вызовы должны быть
       заменены на вызов POSIX.1 getpgrp(), который не имеет аргументов (если нужно получить PGID
       вызывающего), или на вызов getpgid(), как показано выше.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       On success, setpgid()  and setpgrp()  return zero.  On error, -1 is returned, and errno is
       set to indicate the error.

       Вызов getpgrp() (POSIX.1) всегда возвращает PGID вызывающего процесса.

       getpgid(), and the BSD-specific getpgrp()  return a process group on success.   On  error,
       -1 is returned, and errno is set to indicate the error.

ОШИБКИ

       EACCES Попытка  изменить  идентификатор  группы процессов у одного из потомков вызывающего
              процесса, но потомок уже вызвал execve(2) (setpgid(), setpgrp()).

       EINVAL Значение pgid меньше 0 (setpgid(), setpgrp()).

       EPERM  Попытка переместить процесс в группу  процессов  из  другого  сеанса  или  изменить
              идентификатор  группы  процессов  у  одного  из  потомков  вызывающего процесса, но
              потомок находится в другом  сеансе  или  изменить  идентификатор  группы  процессов
              лидера сеанса (setpgid(), setpgrp()).

       ESRCH  Для  getpgid():  нет процесса с указанным pid. Для setpgid(): значение pid не равно
              идентификатору  вызывающего  процесса  или   идентификатору   потомка   вызывающего
              процесса.

СТАНДАРТЫ

       Вызов setpgid() и версия getpgrp() без аргументов соответствуют POSIX.1-2001.

       В  POSIX.1-2001  также  определён  вызов  getpgid()  и его версия setpgrp(), у которых нет
       аргументов (в POSIX.1-2008 определение setpgrp() помечено как устаревшее).

       Версия getpgrp() с одним аргументом и версия setpgrp() с двумя  аргументами  появились  из
       4.2BSD и отсутствуют в POSIX.1.

ЗАМЕЧАНИЯ

       Потомок,  создаваемый  с  помощью fork(2), наследует идентификатор группы процессов своего
       родителя. Значение PGID сохраняется при вызове execve(2).

       Каждая группа процессов является членом сеанса и каждый процесс является членом сеанса,  в
       который входит его группа процессов (смотрите credentials(7)).

       Сеанс  может  иметь  управляющий  терминал.  В  любой  момент  одна (и только одна) группа
       процессов в сеансе может  являться  приоритетной  группой  процессов  (foreground  process
       group)  терминала;  оставшиеся  группы  процессов  выполняются  в  фоновом режиме. Если от
       терминала приходит сигнал (например, нажата клавиша прерывания и сгенерирован SIGINT),  то
       сигнал  посылается  в  приоритетную  группу  процессов  (смотрите  в  termios(3)  описание
       символов, для которых генерируются сигналы). Только приоритетная  группа  процессов  может
       выполнять  вызов  read(2)  для  терминала; если группа процессов в фоновом режиме пытается
       выполнить  read(2)  для  терминала,  то  группе   посылается   сигнал   SIGTTIN,   который
       приостанавливает  её  выполнение.  Функции  tcgetpgrp(3)  и  tcsetpgrp(3) используются для
       получения/установки приоритетной группы процессов у управляющего терминала.

       Вызовы setpgid() и getpgrp() используются  программами,  например  bash(1),  для  создания
       группы процессов с целью реализации управления заданиями оболочки командной строки.

       Если  завершение  процесса  лишает  группу  процессов  главы  и если любой из такой группы
       процессов остановлен, то каждому процессу в группе посылается сигнал SIGHUP с  последующим
       SIGCONT.  Осиротевшей  считается группа процессов, у которой родитель каждого члена группы
       процессов сам является членом группы процессов или членом группы процессов другого  сеанса
       (см. также credentials(7)).

СМ. ТАКЖЕ

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

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства   был   сделан   Alexander   Golubev
       <fatzer2@gmail.com>,  Azamat  Hackimov  <azamat.hackimov@gmail.com>,   Hotellook,   Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,   Yuri   Kozlov   <yuray@komyakino.ru>   и    Иван    Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.