ФЭНДОМ


НАЗВАНИЕ

pctl - контроль над процессами

РЕЗЮМЕ

include "sys.m";

sys := load Sys Sys->PATH;

pctl: fn(flags: int, movefd: list of int): int;

ОПИСАНИЕ

Каждый порожденный процесс в Limbo (нить) делит с родительским процессом некоторое количество ресурсов и свойств, таких как файловое пространство имен, дескрипторы открытых файлов, текущий рабочий каталог, и так далее. Функция Pctl контролирует все это, предоставляя процессам доступ к копии ресурса, вместо действительного совместного его (ресурса) использования.

Набор процессов, имеющих совместный доступ к свойствам, называется группой; например, набор нитей, совместно использующих пространство имен, называется группой пространства имен. Каждый процесс, так или иначе, принадлежит какой-либо `группе`, в свою очередь, группа функционирует как единая программа. Поэтому с помощью команды killgrp можно убить любую группу в каталоге исполняемых приложений prog(3).

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

NEWFD - выделяет процесс в новую группу файловых дескрипторов, что приводит к закрытию для процесса всех остальных файловых дескрипторов, за исключением тех, что перечислены в movefd и будут сохранены в новой группе. В дальнейшем, все изменения файловых дескрипторов группы, осуществляемые данным процессом, будут видны только этому процессу.
FORKFD - выделяет процесс в новую группу, содержащую копии текущих файловых дескрипторов. При этом дескрипторы, перечисленные в movefd закрываются в старой группе. В дальнейшем, все изменения в файловых дескрипторах этой группы, осуществляемые данным процессом, не скажутся на других процессах.
NEWNS - выделяет процесс в новую группу файлового пространства имен, в которой текущий каталог является корневым каталогом, / , нового пространства имен. Для остальных процессов текущий каталог остается текущим.
FORKNS - выделяет процесс в новую группу файлового пространства имен, которая содержит копию текущего. В дальнейшем, все изменения в этом пространстве имен, осуществляемые данным процессом, включая вызовы функции chdir, не скажутся на других процессах.
NODEVS - запрещает текущей группе процессов использование файлового пространства, закрепленного за каким-либо из `устройств` ядра (например, см. использование файловых имен, начинающихся с `#` , как описано в intro(3)). Тем не менее, даже с установленным флагом `NODEVS`, следующие `устройства`, в силу тех или иных особенностей, остаются доступны: pipe(3), env(3), srv(3) and ssl(3).
NEWENV - выделяет процесс в новую группу окружения, не содержащую переменных окружения (в `пустую` группу). В дальнейшем, все изменения в окружении процесса, вызванные им самим, не скажутся на остальных процессах.
FORKENV - выделяет процесс в новую группу окружения, содержащую копию текущих переменных окружения. В дальнейшем, все изменения в окружении процесса, вызванные им самим, не скажутся на остальных процессах.
NEWPGRP - создает процессную группу с идентификатором равным pid процесса, осуществившего вызов функции.


Так, оболочка командного процессора sh(1) в момент исполнения команды использует флаг `FORKFD`; точнее, исполяется ее встроенная функция pctl (см. sh-std(1)). Менеджер окон wm(1) запускает приложения с флагами `NEWPGRP | FORKFD`. Srv(8) использует флаги `NEWGRP | FORKNS | FORKFD`, чтобы изолировать себя от влияния запущенных им же процессов.

Кроме того, функция pctl возвращает числовое значение - идентификатор вызвавшего ее процесса, который может быть использован, например, для доступа к файлам процесса, находящимся в каталоге исполняемых приложений prog(3).

Смотри также

sh-std(1), sys-intro(2)