.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2009 Bill O. Gallmeister (bgallmeister@gmail.com) .\" and Copyright 2010 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" References consulted: .\" Linux glibc source code .\" POSIX 1003.1-2004 documentation .\" (http://www.opengroup.org/onlinepubs/009695399) .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH POSIX_SPAWN 3 "1 ноября 2020 г." GNU "Руководство программиста Linux" .SH ИМЯ posix_spawn, posix_spawnp \- порождает процесс .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint posix_spawn(pid_t *\fP\fIpid\fP\fB, const char *\fP\fIpath\fP\fB,\fP \fB const posix_spawn_file_actions_t *\fP\fIfile_actions\fP\fB,\fP \fB const posix_spawnattr_t *\fP\fIattrp\fP\fB,\fP \fB char *const \fP\fIargv[]\fP\fB, char *const \fP\fIenvp[]\fP\fB);\fP .PP \fBint posix_spawnp(pid_t *\fP\fIpid\fP\fB, const char *\fP\fIfile\fP\fB,\fP \fB const posix_spawn_file_actions_t *\fP\fIfile_actions\fP\fB,\fP \fB const posix_spawnattr_t *\fP\fIattrp\fP\fB,\fP \fB char *const \fP\fIargv[]\fP\fB, char *const \fP\fIenvp[]\fP\fB);\fP .fi .SH ОПИСАНИЕ Функции \fBposix_spawn\fP() и \fBposix_spawnp\fP() используются для создания новых дочерних процессов, которые выполняют указываемый файл. Эти функции были определены в POSIX для стандартизации метода создания новых процессов на машинах, у которых нет возможности поддержки системного вызова \fBfork\fP(2). К таким машинах, обычно, относятся встраиваемые системы без поддержки MMU. .PP Функции \fBposix_spawn\fP() и \fBposix_spawnp\fP() предоставляют комбинацию возможностей \fBfork\fP(2) и \fBexec\fP(3) с некоторыми необязательными обслуживающими действиями в дочернем процессе перед \fBexec\fP(3). Эти функции не служат заменой системных вызовов \fBfork\fP(2) и \fBexecve\fP(2). Фактически, они предоставляют только часть функций системных вызовов. .PP Единственным отличием между \fBposix_spawnp\fP() и \fBposix_spawnp\fP() является способ, которым в них указывается исполняемый дочерним процессом файл. В \fBposix_spawn\fP() исполняемый файл задаётся в виде пути (которое может быть абсолютным или относительным). В \fBposix_spawnp\fP() исполняемый файл задаётся в виде имени файла; система ищет этот файл в списке каталогов, указанных в \fBPATH\fP (также, как это делает \fBexecvp\fP(3)). Кроме данного отличия далее на этой странице всё описание \fBposix_spawn\fP() также относится и к \fBposix_spawnp\fP(). .PP Остальные аргументы функций: .IP * 3 Аргумент \fIpid\fP указывает на буфер, в котором возвращается ID нового дочернего процесса. .IP * Аргумент \fIfile_actions\fP указывает на \fIобъект файловых действий при создании\fP, в котором задаются действия с файлом, выполняемые в потомке между шагами \fBfork\fP(2) и \fBexec\fP(3). Данный объект инициализируется и заполняется перед вызовом \fBposix_spawn\fP() с помощью функций \fBposix_spawn_file_actions_init\fP(3) и \fBposix_spawn_file_actions_*\fP(). .IP * Аргумент \fIattrp\fP указывает на \fIобъект атрибутов\fP, в котором задаются различные атрибуты создаваемого дочернего процесса. Данный объект инициализируется и заполняется перед вызовом \fBposix_spawn\fP() с помощью функций \fBposix_spawnattr_init\fP(3) и \fBposix_spawnattr_*\fP(). .IP * В аргументах \fIargv\fP и \fIenvp\fP задаётся список аргументов и окружения для программы, выполняемой в дочернем процессе, как для \fBexecve\fP(2). .PP Далее функции описаны в виде трёх ступенчатого процесса: шаг \fBfork\fP(), шаг перед \fBexec\fP() (выполняется в потомке) и шаг \fBexec\fP() (выполняется в потомке). .SS "Шаг fork()" Since glibc 2.24, the \fBposix_spawn\fP() function commences by calling \fBclone\fP(2) with \fBCLONE_VM\fP and \fBCLONE_VFORK\fP flags. Older implementations use \fBfork\fP(2), or possibly \fBvfork\fP(2) (see below). .PP PID нового дочернего процесса помещается в \fI*pid\fP. После этого функция \fBposix_spawn\fP() возвращает управление родительскому процессу. .PP Соответственно, родитель может использовать один из системных вызовов, описанных в \fBwait\fP(2), для проверки состояния дочернего процесса. Если потомок завершится с ошибкой в любом из служебных шагов, описанных далее, или возникнет ошибка при выполнении желаемого файла, то он завершит работу с кодом состояния 127. .PP Before glibc 2.24, the child process is created using \fBvfork\fP(2) instead of \fBfork\fP(2) when either of the following is true: .IP * 3 элемент \fIspawn\-flags\fP объекта атрибутов, на который указывает \fIattrp\fP, содержит определённый в GNU флаг \fBPOSIX_SPAWN_USEVFORK\fP; или .IP * \fIfile_actions\fP равно NULL и элемент \fIspawn\-flags\fP объекта атрибутов, на который указывает \fIattrp\fP, \fIне\fP содержит \fBPOSIX_SPAWN_SETSIGMASK\fP, \fBPOSIX_SPAWN_SETSIGDEF\fP, \fBPOSIX_SPAWN_SETSCHEDPARAM\fP, \fBPOSIX_SPAWN_SETSCHEDULER\fP, \fBPOSIX_SPAWN_SETPGROUP\fP или \fBPOSIX_SPAWN_RESETIDS\fP. .PP Иначе говоря, \fBvfork\fP(2) используется, если это запросил вызывающий или не нужна очистка в потомке перед выполнением \fBexec\fP(3) запрашиваемого файла. .PP .SS "Шаг перед exec(): служебные действия" In between the \fBfork()\fP and the \fBexec()\fP steps, a child process may need to perform a set of housekeeping actions. The \fBposix_spawn\fP() and \fBposix_spawnp\fP() functions support a small, well\-defined set of system tasks that the child process can accomplish before it executes the executable file. These operations are controlled by the attributes object pointed to by \fIattrp\fP and the file actions object pointed to by \fIfile_actions\fP. In the child, processing is done in the following sequence: .IP 1. 3 Действия с атрибутами процесса: маска сигналов, обработчики сигналов по умолчанию, алгоритм планирования и параметры, ID группы процесса, эффективного пользователя и группы изменяются согласно объекту атрибутов, на который указывает \fIattrp\fP. .IP 2. Файловые действия, указываемые в аргументе \fIfile_actions\fP, выполняются в порядке их определения вызовами функций \fBposix_spawn_file_actions_add*\fP(). .IP 3. Закрываются файловые дескрипторы, имеющие флаг \fBFD_CLOEXEC\fP. .PP Все атрибуты процесса\-потомка, отличные от атрибутов в объекте, на который указывает \fIattrp\fP и файловые действия в объекте, на который указывает \fIfile_actions\fP, будут изменены как если бы потомок создавался с помощью \fBfork\fP(2) и выполнял программу с помощью \fBexecve\fP(2). .PP Действия атрибутов процесса определяются атрибутами объекта, на который указывает \fIattrp\fP. Атрибут \fIspawn\-flags\fP (устанавливается с помощью \fBposix_spawnattr_setflags\fP(3)) управляет общими действиями, а остальные атрибуты объекта хранят значения, которые будут использованы в этих действиях. .PP Влияние флагов, которые могут быть указаны в \fIspawn\-flags\fP: .TP \fBPOSIX_SPAWN_SETSIGMASK\fP .\" FIXME . .\" (see .\" .BR posix_spawnattr_setsigmask (3)) Назначить маску сигналов равной набору сигналов, определённой в атрибуте \fIspawn\-sigmask\fP объекта, на который указывает \fIattrp\fP. Если не установлен флаг \fBPOSIX_SPAWN_SETSIGMASK\fP, то потомок наследует маску сигналов родителя. .TP \fBPOSIX_SPAWN_SETSIGDEF\fP .\" FIXME . .\" (see .\" .BR posix_spawnattr_setsigdefault (3)) Сбрасывает обработчики всех сигналов в наборе, заданном в атрибуте \fIspawn\-sigdefault\fP объекта, на который указывает \fIattrp\fP, в значения по умолчанию. О том, что происходит с обработчиками сигналов не указанных в атрибуте \fIspawn\-sigdefault\fP или когда не указан \fBPOSIX_SPAWN_SETSIGDEF\fP, смотрите \fBexecve\fP(2). .TP \fBPOSIX_SPAWN_SETSCHEDPARAM\fP .\" (POSIX_PRIORITY_SCHEDULING only) .\" FIXME . .\" (see .\" .BR posix_spawnattr_setschedparam (3)) Если этот флаг установлен, а \fBPOSIX_SPAWN_SETSCHEDULER\fP нет, то изменяет параметры планирования на значения, указанные в атрибуте \fIspawn\-schedparam\fP объекта, на который указывает \fIattrp\fP. .TP \fBPOSIX_SPAWN_SETSCHEDULER\fP Назначает алгоритм планирования и параметры потомка: .RS .IP * 3 .\" FIXME . .\" (see .\" .BR posix_spawnattr_setpolicy (3)) Алгоритму планирования присваивается значение, указанное в атрибуте \fIspawn\-schedpolicy\fP объекта, на который указывает \fIattrp\fP. .IP * .\" FIXME . .\" (see .\" .BR posix_spawnattr_setschedparam (3)) Параметрам планирования присваивается значение, указанное в атрибуте \fIspawn\-schedparam\fP объекта, на который указывает \fIattrp\fP (но смотрите ДЕФЕКТЫ). .PP Если не указаны флаги \fBPOSIX_SPAWN_SETSCHEDPARAM\fP и \fBPOSIX_SPAWN_SETSCHEDPOLICY\fP, то потомок наследует соответствующие атрибуты планирования от родителя. .RE .TP \fBPOSIX_SPAWN_RESETIDS\fP Если этот флаг установлен, то сбрасываются эффективный UID и GID в реальный UID и GID родительского процесса. Если флаг не установлен, то потомок сохраняет эффективный UID и GID родителя. В любом случае, если биты прав set\-user\-ID и set\-group\-ID включены на исполняемом файле, то это заменяет значения эффективного UID и GID (смотрите \fBexecve\fP(2)). .TP \fBPOSIX_SPAWN_SETPGROUP\fP .\" FIXME . .\" (see .\" .BR posix_spawnattr_setpgroup (3)) Назначает группе процесса значение, указанное в атрибуте \fIspawn\-pgroup\fP объекта, на который указывает \fIattrp\fP. Если атрибут \fIspawn\-pgroup\fP равен 0, то ID группы потомка становится равным его ID процесса. Если флаг \fBPOSIX_SPAWN_SETPGROUP\fP не установлен, то потомок наследует ID группы процесса родителя. .TP \fBPOSIX_SPAWN_USEVFORK\fP Since glibc 2.24, this flag has no effect. On older implementations, setting this flag forces the \fBfork()\fP step to use \fBvfork\fP(2) instead of \fBfork\fP(2). The \fB_GNU_SOURCE\fP feature test macro must be defined to obtain the definition of this constant. .TP \fBPOSIX_SPAWN_SETSID\fP (since glibc 2.26) .\" This flag has been accepted in POSIX, see: .\" http://austingroupbugs.net/view.php?id=1044 .\" and has been implemented in glibc since version 2.26 .\" commit daeb1fa2e1b33323e719015f5f546988bd4cc73b If this flag is set, the child process shall create a new session and become the session leader. The child process shall also become the process group leader of the new process group in the session (see \fBsetsid\fP(2)). The \fB_GNU_SOURCE\fP feature test macro must be defined to obtain the definition of this constant. .PP .\" mtk: I think we probably don't want to say the following, since it .\" could lead people to do the wrong thing .\" The POSIX standard tells you to call .\" this function to de-initialize the attributes object pointed to by .\" .I attrp .\" when you are done with it; .\" however, on Linux systems this operation is a no-op. Если \fIattrp\fP равно NULL, то выполняются действия по умолчанию, которые описаны выше по каждому флагу. .PP The \fIfile_actions\fP argument specifies a sequence of file operations that are performed in the child process after the general processing described above, and before it performs the \fBexec\fP(3). If \fIfile_actions\fP is NULL, then no special action is taken, and standard \fBexec\fP(3) semantics apply\(emfile descriptors open before the exec remain open in the new process, except those for which the \fBFD_CLOEXEC\fP flag has been set. File locks remain in place. .PP .\" FIXME . I think the following is best placed in the .\" posix_spawn_file_actions_adddup2(3) page, and a similar statement is .\" also needed in posix_spawn_file_actions_addclose(3) .\" Note that you can specify file descriptors in .\" .I posix_spawn_file_actions_adddup2 (3) .\" which would not be usable if you called .\" .BR dup2 (2) .\" at that time--i.e., file descriptors that are opened or .\" closed by the earlier operations .\" added to .\" .I file_actions . Если \fIfile_actions\fP не равно NULL, то в нём содержится упорядоченный набор запросов \fBopen\fP(2), \fBclose\fP(2) и \fBdup2\fP(2) на файлы. Эти запросы добавляются в \fIfile_actions\fP с помощью \fBposix_spawn_file_actions_addopen\fP(3), \fBposix_spawn_file_actions_addclose\fP(3) и \fBposix_spawn_file_actions_adddup2\fP(3). Запрашиваемые операции выполняются в порядке их добавления в \fIfile_actions\fP. .PP Если какая\-либо обслуживающая операция завершается с ошибкой, (из\-за переданных некорректных значений или по другим причинам, из\-за которых обработка сигналов, планирование процесса, функции изменения ID группы процесса и операции с файловыми дескрипторами завершается с ошибкой), дочерний процесс завершается с кодом выхода 127. .SS "Шаг exec()" После того как потомок создан (fork) и выполнены все запрошенные шаги до exec, потомок выполняет запуск запрошенного исполняемого файла. .PP Дочерний процесс берёт своё окружение из аргумента \fIenvp\fP, которое рассматривается также как если бы оно передавалось в \fBexecve\fP(2). Аргументы созданного процесса выбираются из аргумента \fIargv\fP, который обрабатывается также как для \fBexecve\fP(2). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Upon successful completion, \fBposix_spawn\fP() and \fBposix_spawnp\fP() place the PID of the child process in \fIpid\fP, and return 0. If there is an error during the \fBfork()\fP step, then no child is created, the contents of \fI*pid\fP are unspecified, and these functions return an error number as described below. .PP Даже когда эти функции выполняются без ошибок, дочерний процесс всё ещё может завершиться с ошибкой по многим причинам, касающимся инициализации до \fBexec\fP(). Также, может завершиться ошибкой и \fBexec\fP(3). Во всех этих случаях дочерний процесс завершается с кодом ошибки 127. .SH ОШИБКИ The \fBposix_spawn\fP() and \fBposix_spawnp\fP() functions fail only in the case where the underlying \fBfork\fP(2), \fBvfork\fP(2) or \fBclone\fP(2) call fails; in these cases, these functions return an error number, which will be one of the errors described for \fBfork\fP(2), \fBvfork\fP(2) or \fBclone\fP(2). .PP Также, эти функции завершаются с ошибкой если: .TP \fBENOSYS\fP Функции не поддерживаются в этой системе. .SH ВЕРСИИ Функции \fBposix_spawn\fP() и \fBposix_spawnp\fP() доступны в glibc начиная с версии 2.2. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" .\" FIXME . This piece belongs in spawnattr_setflags(3) .\" The .\" .B POSIX_SPAWN_USEVFORK .\" flag is a GNU extension; the .\" .B _GNU_SOURCE .\" feature test macro must be defined (before including any header files) .\" to obtain the definition of this constant. POSIX.1\-2001, POSIX.1\-2008. .SH ЗАМЕЧАНИЯ Обслуживающие действия в потомке управляются объектами, на который указывает \fIattrp\fP (для не файловых действий) и \fIfile_actions\fP. В описании POSIX типы данных \fIposix_spawnattr_t\fP и \fIposix_spawn_file_actions_t\fP указываются как объекты, а их элементам не даны имена. Переносимые программы должны инициализировать эти объекты с только помощью функций, определённых в POSIX (другими словами, хотя эти объекты могут быть реализованы как структуры с полями, в переносимых программах нельзя привязываться к такой реализации). .PP .\" Tested on glibc 2.12 According to POSIX, it is unspecified whether fork handlers established with \fBpthread_atfork\fP(3) are called when \fBposix_spawn\fP() is invoked. Since glibc 2.24, the fork handlers are not executed in any case. On older implementations, fork handlers are called only if the child is created using \fBfork\fP(2). .PP Не существует функции «posix_fspawn» (т. е., функции типа \fBposix_spawn\fP(), которая вызывала бы \fBfexecve\fP(3) вместо \fBexecve\fP(2)). Однако, подобное поведение можно получить указав аргумент \fIpath\fP как один из файлов в каталоге \fI/proc/self/fd\fP вызывающего. .SH ДЕФЕКТЫ .\" http://sourceware.org/bugzilla/show_bug.cgi?id=12052 В POSIX.1 указано, что когда в \fIspawn\-flags\fP определён \fBPOSIX_SPAWN_SETSCHEDULER\fP, флаг \fBPOSIX_SPAWN_SETSCHEDPARAM\fP (если есть) игнорируется. Однако до glibc 2.14 вызов \fBposix_spawn\fP() завершался с ошибкой, если \fBPOSIX_SPAWN_SETSCHEDULER\fP был указан, а \fBPOSIX_SPAWN_SETSCHEDPARAM\fP отсутствовал. .SH ПРИМЕРЫ Представленная далее программа показывает использование различных функций программного интерфейса POSIX для создания процессов. Она принимает атрибуты из командной строки, которые позволяют задать файловые действия и атрибуты объектов при создании. В остальных аргументах командной строки задаются имя исполняемого файла и аргументы командной строки для программы, исполняемой в потомке. .PP Здесь для исполнения в потомке указана команда \fBdate\fP(1) и вызов \fBposix_spawn\fP() не использует каких\-либо файловых действий и атрибутов объекта. .PP .in +4n .EX $ \fB./a.out date\fP PID потомка: 7634 Tue Feb 1 19:47:50 CEST 2011 Состояние потомка: завершился, состояние=0 .EE .in .PP Здесь параметром командной строки \fI\-c\fP передаётся объект файловых действий, которые закрывают стандартный вывод в потомке. В результате этого \fBdate\fP(1) завершается с ошибкой, когда пытается выполнить вывод данных и завершается с кодом состояния 1. .PP .in +4n .EX $ \fB./a.out \-c date\fP PID потомка: 7636 date: write error: Bad file descriptor Состояние потомка: завершился, состояние=1 .EE .in .PP Здесь используется параметр командной строки \fI\-s\fP для создания объекта атрибутов, который используется для блокировки всех сигналов (блокируемых) в потомке. В результате этого попытка убить потомка сигналом по умолчанию (т. е., \fBSIGTERM\fP) с помощью \fBkill\fP(1) завершается ошибкой, так как этот сигнал заблокирован. Теперь, чтобы убить потомка, требуется сигнал \fBSIGKILL\fP (\fBSIGKILL\fP невозможно заблокировать). .PP .in +4n .EX $ \fB./a.out \-s sleep 60 &\fP [1] 7637 $ PID потомка: 7638 $ \fBkill 7638\fP $ \fBkill \-KILL 7638\fP $ Состояние потомка: убит по сигналу 9 [1]+ Done ./a.out \-s sleep 60 .EE .in .PP Когда мы пытаемся выполнить в потомке несуществующую команду, \fBexec\fP(3) завершается с ошибкой и потомок завершается с кодом 127. .PP .in +4n .EX $ \fB./a.out xxxxx PID потомка: 10190 Состояние потомка: завершился, состояние=127\fP .EE .in .SS "Исходный код программы" \& .EX #include #include #include #include #include #include #include #include #define errExit(msg) do { perror(msg); \e exit(EXIT_FAILURE); } while (0) #define errExitEN(en, msg) \e do { errno = en; perror(msg); \e exit(EXIT_FAILURE); } while (0) char **environ; int main(int argc, char *argv[]) { pid_t child_pid; int s, opt, status; sigset_t mask; posix_spawnattr_t attr; posix_spawnattr_t *attrp; posix_spawn_file_actions_t file_actions; posix_spawn_file_actions_t *file_actionsp; /* разбор параметров командной строки, которые можно использовать в потомке в качестве объекта атрибутов и файловых действий */ attrp = NULL; file_actionsp = NULL; while ((opt = getopt(argc, argv, "sc")) != \-1) { switch (opt) { case \(aqc\(aq: /* \-c: закрыть стандартный вывод в потомке */ /* создаём объект файловых действий и добавляем в него действие «закрыть» */ s = posix_spawn_file_actions_init(&file_actions); if (s != 0) errExitEN(s, "posix_spawn_file_actions_init"); s = posix_spawn_file_actions_addclose(&file_actions, STDOUT_FILENO); if (s != 0) errExitEN(s, "posix_spawn_file_actions_addclose"); file_actionsp = &file_actions; break; case \(aqs\(aq: /* \-s: блокировать все сигналы в потомке */ /* создаём объект атрибутов и добавляем в него действие «назначения сигнальной маски» */ s = posix_spawnattr_init(&attr); if (s != 0) errExitEN(s, "posix_spawnattr_init"); s = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGMASK); if (s != 0) errExitEN(s, "posix_spawnattr_setflags"); sigfillset(&mask); s = posix_spawnattr_setsigmask(&attr, &mask); if (s != 0) errExitEN(s, "posix_spawnattr_setsigmask"); attrp = &attr; break; } } /* Порождение потомка. Имя исполняемой программы и аргументы командной строки берутся из аргументов командной строки этой программы. Окружение исполняемой программы в потомке делается таким же как у родителя. */ s = posix_spawnp(&child_pid, argv[optind], file_actionsp, attrp, &argv[optind], environ); if (s != 0) errExitEN(s, "posix_spawn"); /* уничтожаем все объекты, которые мы создали ранее */ if (attrp != NULL) { s = posix_spawnattr_destroy(attrp); if (s != 0) errExitEN(s, "posix_spawnattr_destroy"); } if (file_actionsp != NULL) { s = posix_spawn_file_actions_destroy(file_actionsp); if (s != 0) errExitEN(s, "posix_spawn_file_actions_destroy"); } printf("PID of child: %jd\en", (intmax_t) child_pid); /* отслеживаем состояние потомка до его завершения */ do { s = waitpid(child_pid, &status, WUNTRACED | WCONTINUED); if (s == \-1) errExit("waitpid"); printf("Состояние потомка: "); if (WIFEXITED(status)) { printf("завершился, состояние=%d\en", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("убит по сигналу %d\en", WTERMSIG(status)); } else if (WIFSTOPPED(status)) { printf("остановлен по сигналу %d\en", WSTOPSIG(status)); } else if (WIFCONTINUED(status)) { printf("выполняется\en"); } } while (!WIFEXITED(status) && !WIFSIGNALED(status)); exit(EXIT_SUCCESS); } .EE .SH "СМ. ТАКЖЕ" .\" Disable hyphenation .nh .ad l \fBclose\fP(2), \fBdup2\fP(2), \fBexecl\fP(2), \fBexeclp\fP(2), \fBfork\fP(2), \fBopen\fP(2), \fBsched_setparam\fP(2), \fBsched_setscheduler\fP(2), \fBsetpgid\fP(2), \fBsetuid\fP(2), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBposix_spawn_file_actions_addclose\fP(3), \fBposix_spawn_file_actions_adddup2\fP(3), \fBposix_spawn_file_actions_addopen\fP(3), \fBposix_spawn_file_actions_destroy\fP(3), \fBposix_spawn_file_actions_init\fP(3), \fBposix_spawnattr_destroy\fP(3), \fBposix_spawnattr_getflags\fP(3), \fBposix_spawnattr_getpgroup\fP(3), \fBposix_spawnattr_getschedparam\fP(3), \fBposix_spawnattr_getschedpolicy\fP(3), \fBposix_spawnattr_getsigdefault\fP(3), \fBposix_spawnattr_getsigmask\fP(3), \fBposix_spawnattr_init\fP(3), \fBposix_spawnattr_setflags\fP(3), \fBposix_spawnattr_setpgroup\fP(3), \fBposix_spawnattr_setschedparam\fP(3), \fBposix_spawnattr_setschedpolicy\fP(3), \fBposix_spawnattr_setsigdefault\fP(3), \fBposix_spawnattr_setsigmask\fP(3), \fBpthread_atfork\fP(3), \fI\fP, Base Definitions volume of POSIX.1\-2001, \fIhttp://www.opengroup.org/unix/online.html\fP .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov , kogamatranslator49 , Kogan, Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .