setpgid()

Присоединиться к группе процессов или создать группу процессов

Прототип:

#include <process.h>
int setpgid( pid_t pid,
pid_t pgid );

Аргументы:

pid
0, или идентификатор процесса, который будет работать с группой процессов.
pgid
0, или идентификатор группы процессов, к которой необходимо присоединиться или ее создать.

Библиотека:

libc

Описание:

Функция setpgid() используется либо для присоединения к существующей группе процессов, либо для создания новой группу процессов в сеансе вызывающего процесса. Идентификатор группы процессов для лидера сеанса не изменяется.

Принятые определения:

Процесс
Исполняющаяся программа, идентифицируемая неотрицательным целым числом - идентификатором процесса (process ID или PID).
Группа процессов
Набор из одного или нескольких процессов, имеющий уникальный идентификатор - идентификатор группы процессов. Идентификатор группы процессов является положительным целым числом.

В случае успешного завершения, идентификатор группы процессов для процесса PID равным pid устанавливается в значение pgid. Если задать pid или pgid равными нулю, то это будет соответствовать идентификатору вызывающего процесса.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EACCES
Параметр pid соответствует идентификатору процесса - потомка для вызывающего процесса, и этот потомок успешно выполнил одну из функций семейства exec*().
EINVAL
Значение параметра pgid меньше нуля.
ENOSYS
Функция setpgid() не поддерживается в текущей реализации (данный тип ошибки включен для соответствия POSIX).
EPERM
Вызывающий процесс не имеет достаточных привилегий для установки идентификатора группы pgid процессу с идентификатором pid.
ESRCH
Процесса с идентификатором pid не существует.

Примеры:

/*
* Процесс присоединяется к группе процессов 0.
*/
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <process.h>
int main( void )
{
if ( setpgid( getpid(), 0 ) == -1 )
{
perror( "setpgid" );
}
printf( "%d принадлежит к группе процессов %d\n", getpid(), getpgrp() );
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, getpgid(), getsid(), setsid()




Предыдущий раздел: Описание API системной библиотеки