pid_t pgroup
SPAWN_SETGROUP. Если флаг SPAWN_SETGROUP установлен и inherit.pgroup установлен как SPAWN_NEWPGROUP, то дочерний процесс открывает новую группу процессов с идентификатором группы (GID), равным PID этого нового процесса. sigset_t sigmask
SPAWN_SETSIGMASK. sigset_t sigdefault
SPAWN_SETSIGDEF. uint32_t nd
SPAWN_SETND.argv
argv[0] должно быть строкой (char*), содержащей имя файла, загружаемого как процесс (но может быть NULL, если аргументы не передаются). Последний элемент массива argv обязан быть NULL. Само значение argv никогда не может быть NULL.envp
envp обязан быть NULL. Каждый элемент массива является строкой (char*) вида: variable = value. Если само значение указателя envp равно NULL, то дочерний процесс полностью наследует копию окружения родителя. (Окружение процесса — всегда «копия», поэтому любые изменения, внесенные в окружение дочерним процессом, никак не отражаются на окружении его родителя.)Если дочерний процесс является скриптом интерпретатора (флаг SPAWN_CHECK_SCRIPT
#!, за которыми должны следовать путь и аргументы того интерпретатора, который будет использоваться для интерпретации этого скрипта. К скрипту не применяется установленный в системе интерпретатор по умолчанию (как это происходит при вызове его по имени из командной строки).Правила наследования (и ненаследования) параметров дочернего процесса от родителя (RID, RGID и других атрибутов) жестко регламентированы, достаточно сложны (в зависимости от флагов) и могут быть уточнены в технической документации QNX. Отметим, что безусловно наследуются такие параметры, как: а) приоритет и дисциплина диспетчеризации; б) рабочий и корневой каталоги файловой системы. Не наследуются: установки таймеров процесса tms_utime
tms_stime, tms_cutime и tms_cstime, значение взведенного сигнала SIGALRM (это значение сбрасывается в ноль), файловые блокировки, блокировки и отображения памяти (shared memory), установленные родителем.При успешном завершении вызов функции возвращает PID порожденного процесса. При неудаче возвращается -1 и errno
• E2BIG
ARG_MAX;• EACCESS
ST_NOEXEC;• EAGAIN
• ERADF
fd_map;• EFAULT
• ELOOP
• EMFILE
• ENAMETOOLONG
PATH_MAX или длина компонента имени файла и пути превышает NAME_MAX;• ENOENT
• ENOEXEC
• ENOMEM
• ENOSYS
spawn();• ENOTDIR
Даже из этого очень краткого обзора вызова spawn()
• Эта форма универсальна (самодостаточна), она позволяет обеспечить весь спектр разнообразных форм порождения нового процесса