Системный вызов setpgid()

Прототип системного вызова

#include <sys/types.h>
#include <unistd.h>
 
int setpgid(pid_t pid, pid_t pgid);

Описание системных вызовов

Системный вызов setpgid служит для перевода процесса из одной группы процессов в другую, а также для создания новой группы процессов.

Параметр pid является идентификатором процесса, который мы собираемся перевести в другую группу, а параметр pgid - идентификатором группы процессов, в которую мы хотим перевести этот процесс.

Не все комбинации этих параметров разрешены. Перевести в другую группу процесс может либо самого себя (и то не во всякую, и не всегда), либо свой процесс-ребенок, который не выполнял системный вызов exec(), т.е. не запускал на выполнение другую программу.

  • Если параметр pid равен 0, то считается, что процесс переводит в другую группу сам себя.

  • Если параметр pgid равен 0, то в Linux считается, что процесс переводится в группу с идентификатором, совпадающим с идентификатором процесса, определяемого первым параметром.

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

В новую группу не может перейти процесс, являющийся лидером группы, т.е. процесс, идентификатор которого совпадает с идентификатором его группы.

Системный вызов возвращает значение 0 при нормальном завершении и значение -1 при возникновении ошибки.

Тип данных pid_t является синонимом для одного из целочисленных типов языка C.