Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Posix_spawn, posix_spawnp






 

Имя posix_spawn, posix_spawnp — функции порождения процессов (ADVANCED REALTIME)

Синопсис

SPN #include < spawn.h>

int posix_spawn (

pid_t *restrict pid, const char *restrict path,

const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *restrict attrp, char *const argv[restrict], char *const envp[restrict]); int posix_spawnp (

pid_t *restrict pid, const char *restrict file,

const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *restrict attrp, char *const argv[restrict], char * const envp[restrict]);

Описание

Функции posix_spawn () и posix_spawnp () предназначены для создания нового (сыновнего) процесса из заданного образа процесса. Новый образ процесса создается на основе обычного выполняе м ого файла, и м енуе м ого файлом образа нового процесса.

Если в качестве результата этого вызова выполняется С-програ мм а, то она должна быть представлена как функция языка С следующи м образо м: int main (int argc, char *argv[]);

Здесь argc— количество аргу м ентов, а argv— м ассив си м вольных указателей на аргу м енты функции. Кро м е того, следующая пере м енная extern char **environ; должна быть инициализирована как указатель на массив символьных указателей на строки описания конфигурации среды.

Аргумент argv представляет собой массив символьных указателей на строки с завершающим нулем. Последний член этого массива (он не учитывается аргу м ентом argc) должен быть нулевым указателе м. Эти строки составляют список аргу м ентов, доступных для образа нового процесса. Значение эле м ента argrv[0] должно указывать на и м я файла, который связан с образо м процесса, запускае м о г о функцией posix_spawn() или posix_spawnp().

Аргу м ент envp представляет собой м ассив си м вольных указателей на строки с завершающим нулем. Эти строки составляют среду для образа нового процесса. Массив среды завершается нулевым указателем.

Количество байтов, допустимых для обобщенного аргумента сыновнего процесса и списков строк описания конфигурации среды, составляет {ARG_MAX}. В систе м ной доку м е н тации конкретной реализации (с м. то м Base Definitions стандарта IEEE Std 1003.1-2001, Chapter 2, Conformance) должно быть указано, включаются ли в это значение такие служебные данные, как си м волы конца строки, указатели или байты выравнивания.

Ар г у м ент path, передавае м ый функции posix_spawn(), содержит путевое и м я, которое идентифицирует файл образа ново г о процесса.

Пара м етр file, передавае м ый функции posix_spawnp (), используется для формирования путевого имени, которое идентифицирует файл образа нового процесса. Если пара м етр file содержит си м вол «косая черта», то пара м етр file следует рассматривать как путевое имя файла образа нового процесса. В противно м случае префикс пути д ля это г о файла должен быть получен путе м поиска в катало г ах, указанных с по м ощью пере м енной среды PATHм. то м Base Definitions стандарта IEEE Std 1003.1-2001, Chapter 8, Environment Variables). Если эта Переменная среды не определена, результаты поиска определяются конкретной реализацией.

Если пара м етр file_actions является нулевы м указателе м, то файловые дескрипторы, открытые в вызываю щ е м процессе, останутся открыты м и и в сыновне м, за исключение м тех из них, для которых установлен фла г «закрытия после выполнения» FD_CLOEXECм. описание функции fcntl()). Для оставшихся открыты м и файловых дескрипторов все атрибуты соответствую щ их описаний открытых файлов, включал блокировки файлов (с м. описание функции fcntl ()), останутся без из м енений.

Если пара м етр file_actions не содержит значение NULL, то файловые дескрипторы, открытые в сыновне м процессе, должны соответствовать открытым файловым дескрипторам вызывающего процесса, но с учетом модификации, проведенной в соответствии с содержимым объекта действий, адресуемого параметром file_actions, и флаго м FD_CLOEXEC каждого из оставшихся открыты м и (после выполнения действий над файла м и) файловых дескрипторов. Порядок выполнения действий над файла м и должен быть таки м.

1. Множество открытых файловых дескрипторов дл я сыновнего процесса должно сначала совпадать со м ножество м открытых файловых дескрипторов для вызывающего процесса. Все атрибуты соответствующих описаний открытых файлов, включал блокировки файлов (с м. описание функции fcntl ()), останутся без из м енений.

2. Маска сигнала, стандартные действия сигналов, а также идентификационные номера эффективного пользователя и группы для сыновнего процесса должны измениться в соответствии со значениями, заданными в объекте атрибутов, адресуемом параметром actrp.

3. Действия над файлами, заданные объектом действий для порождаемого процесса, должны быть выполнены в порядке их добавления в этот объект.

4. Любой файловый д ескриптор, у которого установлен флаг FD_CLOEXECм. описание функции fcntl ()), д олжен быть закрыт.

Тип объекта атрибутов posix_spawnattr_t опре д еляется в заголовке < spawn. h>. По м еньшей м ере он д олжен со д ержать атрибуты, опре д еленные ниже.

Если в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, установлен флаг POSIX_SPAWN_SETPGROUP, а атрибут spawn-рдгоиртото же объекта не равен нулю, то группа сыновних процессов д олжна быть за д ана эти м (нену л евы м) атрибуто м объекта.

В качестве специального случал, ес л и в атрибуте spawn-flags объекта, а д ресуемого пара м етро м attrp, установ л ен ф л аг POSIX_SPAWN_SETPGROUP, а атрибут spawn-pgroup того же объекта равен ну л ю, то порож д ае м ый сыновний процесс будет входить в новую группу процессов, идентификатор (ID) которой будет равен значению ID его процесса. Ес л и в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, ф л аг POSIX_SPAWN_SETPGROUP не установ л ен, то новый сыновний процесс наслелует группу ро д ите л ьского процесса.

PS Если в атрибуте spawn-flags объекта, а д ресуе м ого пара м етро м attrp, установлен флаг POSIX_SPAWN_SETSCHEDPARAM, но флаг POSIX_SPAWN_SETSCHEDULER не установлен, то образ нового процесса будет изначально обладать стратегией планирования вызывающего процесса с пара м етра м и планирования, за д анны м и в атрибуте spawn-schedparamoбъeкта, адресуемого пара м етро м attrp.

Если в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, установлен флаг POSIX_SPAWN_SETSCHEDULER (независи м о от установки флага POSIX_SPAWN_SETSCHEDPARAM), то образ нового процесса будет изначально обладать стратегией планирования, заданной атрибуто м spawn-schedpolicy объекта, адресуе м ого пара м етро м attrp, и пара м етра м и планирования, заданны м и в атрибуте spawn-schedparamToro же объекта.

Флаг POSIX_SPAWN_RESETIDS в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, обусловливает значение ID эффективного пользователя сыновнего процесса. Если этот флаг не установлен, сыновний процесс наслелует ID эффективного пользователя родительского процесса. Если этот флаг установлен, ID эффективного пользователя сыновнего процесса должен быть установлен равны м значению ID реального пользователя родительского процесса. В любо м случае, если установлен бит режи м а «set-user-ID» д ля файла образа нового процесса, ID эффективно г о пользователя сыновне г о процесса при м ет значение, равное значению ID владельца этого файла до того, как начнет выполняться образ нового процесса.

Флаг POSIX__SPAWN_RESETIDS в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, также обусловливает значение ГО эффективной группы сыновне г о процесса Если этот фла г не установлен, сыновний процесс наслелует ID эффективной группы родительско г о процесса. Если этот флат установлен, ID эффективной группы сыновнего процесса должен быть установлен равны м значению ID реальной группы родительского процесса. В любо м случае, если установлен бит режи м а «set-group-ID» д л я файла образа нового процесса, ID эффективной группы сыновнего процесса примет значение, равное значению ID группы этого файла до того, как начнет выполняться образ нового процесса.

Если в атрибуте spawn-flags объекта, адресуемого параметром attrp, установлен флаг POSIX_SPAWN_SETSIGMASK, то сыновний процесс изначально будет и м еть м аску сигнала, заданную в атрибуте spawn-sigmask объекта, адресуе м ого пара м етро м attrp.

Если в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, установлен флаг POSIX_SPAWN_SETSIGDEF, то сигналы, заданные в атрибуте spawn-sigdefault того же объекта, будут установлены равны м и их действия м по у м олчанию в сыновне м процессе. Сигналы, установленные равны м и действия м по у м олчанию в родительско м процессе, должны быть установлены равны м и действия м по у м олчанию в сыновне м процессе.

Сигналы, установленные для перехвата вызывающим процессом, должны быть установлены равными действиям по умолчанию в сыновнем процессе.

За исключение м сигнала SIGCHLD, сигналы, которые д олжны игнорироваться образо м вызываю щ его процесса, д олжны игнорироваться сыновни м процессо м, если не опре д елено иное посредство м флага POSIX_SPAWN_SETSIGDEF, установленного в атрибуте spawn-flags объекта, адресуе м ого пара м етро м attrp, и сигнала SIGCHLD, обозначенного в атрибуте spawn-sigdefault того же объекта.

Если сигнал SIGCHLD установлен как игнорируемый вызывающим процессом, точно не установлено, должен ли сигнал SIGCHLD игнорироваться сыновним процессом или он будет установлен равным действию по умолчанию в сыновнем процессе, если не определено иное посредством флага POSIX_SPAWN_SETSIGDEF, установленного в атрибуте spawn-flags объекта, адресуемого параметром attrp, и сигнала SIGCHLD, обозначенного в атрибуте spawn_sigdefault того же объекта.

Если указатель attrp содержит значение NULL, используются значения по умолчанию.

Все атрибуты процесса, на которые не было оказано влияния со стороны атрибутов, установленных в объекте, адресуемом параметром attrp (как было описано выше), или вследствие манипуляций с файловыми дескрипторами, заданных в параметре file_actions, должны присутствовать в образе нового процесса в таком виде, как будто была вызвана функция fork() для создания сыновнего процесса, а затем член семейства функций exec был вызван сыновним процессом для выполнения образа нового процесса.

THR Запускаются ли обработчики разветвлений при вызове функций posix_spawn () или posix_spawnp (), определяется конкретной реализацией.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.