Системный вызов getpgid() Прототип системного вызова #include <sys/types.h> #include <unistd.h> pid_t getpgid(pid_t pid); Описание системного вызова Системный вызов возвращает идентификатор группы процессов для процесса с идентификатором pid. Узнать номер группы процесс может только для себя самого или для процесса из своего сеанса. При других значениях pid системный вызов возвращает значение -1. Тип данных pid_t является синонимом для одного из целочисленных типов языка C. |
Системный вызов getpgrp() Прототип системного вызова #include <sys/types.h> #include <unistd.h> pid_t getpgrp(void); Описание системного вызова Системный вызов getpgrp возвращает идентификатор группы процессов для текущего процесса. Тип данных pid_t является синонимом для одного из целочисленных типов языка C. |
Для перевода процесса в другую группу процессов, возможно, с одновременным ее созданием, применяется системный вызов setpgid(). Перевести в другую группу процесс может либо самого себя (и то не во всякую и не всегда), либо свой процесс-ребенок, который не выполнял системный вызов exec(), т.е. не запускал на выполнение другую программу. При определенных значениях параметров системного вызова создается новая группа процессов с идентификатором, совпадающим с идентификатором переводимого процесса, состоящая первоначально только из одного этого процесса. Новая группа может быть создана только таким способом, поэтому идентификаторы групп в системе уникальны. Переход в другую группу без создания новой группы возможен лишь в пределах одного сеанса.
В некоторых разновидностях UNIX системный вызов setpgid() отсутствует, а вместо него используется системный вызов setpgrp(), способный только создавать новую группу процессов с идентификатором, совпадающим с идентификатором текущего процесса, и переводить в нее текущий процесс. (В ряде систем, где сосуществуют вызовы setpgrp() и setpgid(), например в Solaris, вызов setpgrp() ведет себя иначе – он аналогичен рассматриваемому ниже вызову setsid().)