spawnp()

Создать и выполнить новый дочерний процесс с заданием относительного пути

Прототип:

#include <spawn.h>
pid_t spawnp( const char *file,
int fd_count,
const int fd_map[ ],
const struct inheritance *inherit,
char * const argv[ ],
char * const envp[ ] );

Аргументы:

file
Имя исполняемого файла. Если этот параметр содержит /, он используется как путь поиска файла. В противном случае путь поиска определяется по содержимому переменной окружения PATH.
fd_count
fd_map
Описание данных параметров представлено на странице spawn(), включая раздел "Маппирование файловых дескрипторов".
inherit
Указатель на struct inheritance, определяющий перечень наследуемых сущностей.

Note: Если необходимо использовать spawnp() удаленно, следует установить поле nd структуры struct inheritance с помощью функции netmgr_strtond().

argv
Указатель на массив аргументов процесса. Значение argv[0] не может быть установлено в NULL и должно представлять имя файла загружаемой программы. Последний член массива должен быть всегда равен NULL. Сам указатель argv не может быть равен NULL.
envp
Указатель на массив строк, представляющих переменные окружения. Последний член массива должен быть всегда равен NULL. Формат каждой строки должен быть следующим: variable=value. Если envp равен NULL, то дочерний процесс унаследует переменные окружения родителя.

Библиотека:

libc

Описание:

Функция spawnp() создает и исполняет новый дочерний процесс на основе файла file. Она также устанавливает флаги SPAWN_CHECK_SCRIPT и SPAWN_SEARCH_PATH при неявном вызове spawn().


Note: Если новый процесс является shell-скриптом, то его первая строка должна начинаться с #! с последующим именем программы-интерпретатора (опционально могут быть также переданы его аргументы). Скрипт также должен иметь разрешения на исполнение.

Данная функция относится только к ЗОСРВ «Нейтрино» (основано на стандарте POSIX 1003.1d). Системная библиотека также включает ряд специализированных функций вида spawn*(). Их имена содержат ряд дополнительных суффиксов:

Суффикс: Влияние на принимаемые аргументы:
e Массив переменных окружения.
l Список аргументов программы с завершающим символом NULL.
p Относительный путь. Если путь не содержит символ /, программа будет искаться по адресам, перечисленным в переменной PATH. Данный суффикс также позволяет конструкцию #!; см. SPAWN_CHECK_SCRIPT далее.
v Векторный формат аргументов программы.

Перечисленные на рисунке функции в конечном счете вызывают spawn():

spawnall.jpg
Рисунок 1. Большинство функций spawn*() предпринимают ряд настроечных действий перед отправкой сообщения procnto-* функцией spawn()

Дочерний процесс наследует следующие атрибуты родителя:

Дочерний процесс при этом имеет ряд отличий от родителя:

Дочерний процесс также будет иметь следующие отличия от родителя, если установлен флаг SPAWN_EXEC:

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

Доступ к переменным окружения в дочернем процессе осуществляется через environ.

Если file относится к файловой системе с установленным флагом ST_NOSUID, то: EUID, EGID, сохраненные UID/GID для потомка не меняются. В противном случае, если бит сохранения UID установлен, EUID потомка устанавливается в UID владельца файла file. Аналогичная история с установкой бита сохранения GID и GID владельца файла file. RUID, RGID и дополнительные идентификаторы групп остаются соответствующими родителю. EUID и EGID потомка сохраняются как сохраненные UID/GID для использования в setuid().

Допустим, что вызвана функция spawnp():

spawnp( file, fd_count, fd_map, inherit, argv, envp );

при этом будет выполнено следующее:

и только после этого неявно вызывается spawn().


Note: Отношения родитель-потомок не означают, что потомок будет завершен при смерти родителя.

Возвращаемое значение:

Идентификатор дочернего процесса. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.


Note: Если установлен флаг SPAWN_EXEC в поле flags структуры struct inheritance, spawnp() не возвращает управление в отсутствии ошибок.

Коды ошибок:

Функция устанавливает коды ошибок, используемые spawn().

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

struct inheritance, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), getenv(), netmgr_strtond(), putenv(), setenv(), sigaddset(), sigdelset(), sigemptyset(), sigfillset(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnv(), spawnve(), spawnvp(), spawnvpe(), wait(), waitpid()




Предыдущий раздел: Описание API системной библиотеки