К сожалению, не во всех
К сожалению, не во всех версиях UNIX присутствует данный системный вызов. Здесь мы сталкиваемся с тяжелым наследием разделения линий UNIX'ов на линию BSD и линию System V, которое будет нас преследовать почти на всем протяжении данной темы. Вместо вызова getpgid() в таких системах существует системный вызов getpgrp(), который возвращает номер группы только для текущего процесса.
Системный вызов 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().)
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий