int posix_spawnattr_setpgroup
(posix_spawnattr_t *attr, pid_t pgroup); Устанавливает значение атрибута_pgroup, хранимого в объекте, заданном параметром attr, равным параметру pgroup, если в атрибуте _flags установлен признак POSIX_S PAWN_SETPGROUPint posix_spawnattr_getschedparam
(const posix_spawnattr_t *restrict attr, struct sched_param *restrict schedparam) ; Возвращает значение атрибута_sp, хранимого в объекте, заданном параметром attr, и сохраняет его в параметре schedparamint posix_spawnattr_setschedparam
(posix_spawnattr_t *attr, const struct sched_param *restrict schedparam) ; Устанавливает значение атрибута_sp, хранимого в объекте, заданном параметром attr, равным параметру schedparam, если в атрибуте _flags установлен признак POSIX_SPAWN_SETSCHEDPARAMint posix_spawnattr_getschedpolicy
(const posix_spawnattr_t *restrict attr, int *restrict schedpolicy) ; Возвращает значение атрибута _policy, хранимого в объекте, заданном параметром attr, и сохраняет его в параметре schedpolicyint posix_spawnattr_setschedpolicy
(posix_spawnattr_t *attr, int schedpolicy); Устанавливает значение атрибута_policy, хранимого в объекте, заданном параметром attr, равным параметру schedpolicy, если в атрибуте_flags установлен признак POSIX_SPAWN_SETSCHEDULERint posix_spawnattr_getsigdefault
(const posix_spawnattr_t *restrict attr, sigset_t *restrict sigdefault); Возвращает значение атрибута_sd, хранимого в объекте, заданном параметром attr, и сохраняет его в параметре sigdefaultint posix_spawnattr_setsigdefault
(posix_spawnattr_t *attr, const sigset_t *restrictsigdefault); Устанавливает значение атрибута_sd, хранимого в объекте, заданном параметром attr, равным параметру sigdefault, если в атрибуте _flags установлен признак POSIX_SPAWN_SETSIGDEFint p osix_spawnattr_getsigmask
(const posix_spawnattr_t *restrict attr, sigset_t *restrict sigmask); Возвращает значение атрибута _ss, хранимого в объекте, заданном параметром attr, и сохраняет его в параметре sigmaskint posix_spawnattr_setsigmask
(posix_spawnattr_t *restrict attr, const sigset_t *restrict sigmask); Устанавливает значение атрибута_ss, хранимого в объекте, заданном параметром attr, равным параметру sigmask, если в атрибуте _flags установлен признак POSIX_S PAWN_SETSIGMASKint posix_spawnattr_destroy
(posix_spawnattr_t *attr); Разрушает объект, заданный параметром attr. Этот объект можно затем снова инициализировать с помощью функции posix_spawnattr_initint posix_spawnattr_init
(posix_spawnattr_t *attr);Инициализирует объект, заданный параметром attr, значениями, действующими по умолчанию для всех атрибутов, содержащихся в этой структуреПример использования функции posix_spawn для создания процесса приведен в листинге 3.3.
// Листинг 3.3. Порождение процесса с помощью // функции posix_spawn, которая
// вызывает утилиту ps
#include
#include
#include
#include
{
//...
posix_spawnattr_t X;
posix_spawn_file_actions_t Y;
pid_t Pid;
char *const argv[] = {"/bin/ps»,«-lf»,NULL};
char *const envp[] = {«PROCESSES=2»};
posix_spawnattr_init(&X);
posix_spawn_file_actions_init(&Y);
posix_spawn(&Pid,"/bin/ps»,&Y,&X,argv,envp);
perror(«posix_spawn»);
cout << «spawned PID: " << Pid << endl;
//...
return(0);
}
В листинге 3.3 инициализируются объекты posix_spawnattr_t и posix_spawn_ file_actions_t. Функция posix_spawn вызывается с такими аргументами: Pid,путь " /bin/ps», Y, X, массив argv (который содержит команду в качестве первого элемента и опцию в качестве второго) и массив envp, содержащий список переменных среды. При успешном выполнении функции posix_spawn значение, хранимое в параметре Pid, станет идентификатором (PID) порожденного процесса, а функция perror отобразит следующий результат:
posix_spawn: Success
Затем будет выведено значение Pid.
В данном случае порожденный процесс выполняет следующую команду: /bin/ps -lfПри успешном выполнении POSIX-функции возвращают (обычным путем) число 0 и в параметре pid
идентификатор (id) сыновнего процесса (для родительского процесса). В случае неудачи сыновний процесс не создается, следовательно, значение pid не имеет смысла, а сама функция возвращает значение ошибки.