table of contents
- trixie 4.27.0-1
- trixie-backports 4.31.0-1~bpo13+1
- testing 4.31.0-1
- unstable 4.32.4-1
| setpgid(2) | System Calls Manual | setpgid(2) |
НАИМЕНОВАНИЕ¶
setpgid, getpgid, setpgrp, getpgrp - устанавливает/получает группу процессов
БИБЛИОТЕКА¶
Стандартная библиотека языка Си (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 */
getpgid():
_XOPEN_SOURCE >= 500
|| /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
setpgrp() (POSIX.1):
_XOPEN_SOURCE >= 500
|| /* Начиная с 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()).
- EPERM
- Целевая группа процессов не существует. (setpgid(), setpgrp()).
- ESRCH
- Для getpgid(): нет процесса с указанным pid. Для setpgid(): значение pid не равно идентификатору вызывающего процесса или идентификатору потомка вызывающего процесса.
СТАНДАРТЫ¶
- getpgid()
- setpgid()
- getpgrp() (без аргументов)
- POSIX.1-2024.
- setpgrp()
- getpgrp() (1 аргумент)
- Отсутствуют.
ИСТОРИЯ¶
- getpgid()
- setpgid()
- getpgrp() (без аргументов)
- POSIX.1-2001.
- setpgrp() (без аргументов)
- POSIX.1-2001. Obsoleted in POSIX.1-2008. Removed in POSIX.1-2024.
- setpgrp() (2 аргумента)
- getpgrp() (1 аргумент)
- 4.2BSD.
ПРИМЕЧАНИЯ¶
Потомок, создаваемый с помощью fork(2), наследует идентификатор группы процессов своего родителя. Значение PGID сохраняется при вызове execve(2).
Каждая группа процессов является членом сеанса и каждый процесс является членом сеанса, в который входит его группа процессов (смотрите credentials(7)).
A session can have a controlling terminal. At any time, one (and only one) of the process groups in the session can be the foreground process group for the terminal; the remaining process groups are in the background. If a signal is generated from the terminal (e.g., typing the interrupt key to generate SIGINT), that signal is sent to the foreground process group. (See termios(3type) for a description of the characters that generate signals.) Only the foreground process group may read(2) from the terminal; if a background process group tries to read(2) from the terminal, then the group is sent a SIGTTIN signal, which suspends it. The tcgetpgrp(3) and tcsetpgrp(3) functions are used to get/set the foreground process group of the controlling terminal.
Вызовы setpgid() и getpgrp() используются программами, например bash(1), для создания группы процессов с целью реализации управления заданиями оболочки командной строки.
Если завершение процесса лишает группу процессов главы и если любой из такой группы процессов остановлен, то каждому процессу в группе посылается сигнал SIGHUP с последующим SIGCONT. Осиротевшей считается группа процессов, у которой родитель каждого члена группы процессов сам является членом группы процессов или членом группы процессов другого сеанса (см. также credentials(7)).
СМОТРИТЕ ТАКЖЕ¶
getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3type), termios(7), 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 (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 2 июля 2026 г. | Linux man-pages 6.20 |