Реферат Курсовая Конспект
Синопсис - раздел Образование, Лекція 4 5 Створення процесу # Include < Stdlib.h > Int Posix_Spawn (Pid_T *restrict Pid, C...
|
# include < stdlib.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 () передає параметр path, а функція posix_spawnp () – параметр file. Параметр path у функції posix_spawn () приймає повне або відносне складене ім'я файлу , який виконується, а параметр file у функції posix_spawnp () – тільки ім'я програми, яка виконується. Якщо цей параметр містить символ ²похила риска², то вміст параметру file використовується в якості складеного імені шляху. В протилежному випадку, шлях до файлу, що виконується визначається за допомогою змінної середовища PATH.
Параметр file_actions є вказівником на структуру posix_spawn_file_ actions_t:
struct posix_spawn_file_actions_t {
{ int _allocated;
int _used;
struct _spawn_action *actions;
int _pad [ 16 ]; };
Структура posix_spawn_file_actions_t містить інформацію про дії, які виконуються в новому процесі над дескрипторами файлів. Параметр file_actions використовується для батьківського набору дескрипторів відкритих файлів в набір дескрипторів файлів для породженого дочірнього процесу. Дана структура може містити ряд файлових операцій, передбачених для виконання в послідовності, в якій вони були додані в об’єкт дій над файлами. Ці файлові операції виконуються над дескрипторами відкритих файлів батьківського процесу і дозволяють копіювати, добавляти, видаляти або закривати дескриптори заданих файлів від імені дочірнього процесу навіть до його створення. Якщо параметр file_actions містить нульовий вказівник, то дескриптори файлів, відкриті батьківським процесом, залишаться відкритими для його нащадка без будь-яких модифікацій. Функції, які використовуються добавлення дій над файлами в об’єкт типу posix_spawn_file_actions, подані в табл. 2.
Параметр attrp вказує на структуру posix_spawnattr_t:
struct posix_spawnattr_t
{ short int _flags;
pid_t _pgrp;
sigset_t sd;
sigset_t ss;
struct sched_param _sp;
int _policy;
int _pad [ 16 ];
Таблиця 2. | Функції, що використовуються для добавлення дій над файлами в об’єктах типу posix_spawn_file_actions_t | |
Функції | Опис | |
int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions, int fildes); | Добавляє дію close () в об’єкт дії над файлами, заданий параметром file_actions. В результаті при породженні нового процесу з допомогою цього об’єкту буде закрито дескриптор fildes | |
int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, int fildes, const char *restrict path, into flag, mode_t mode); | Добавляє дію open ()в об’єкт дії над файлами, заданий параметром file_actions. В результаті при породженні нового процесу з допомогою цього об’єкту буде відкрито файл, заданий параметром path, з використанням дескриптора fildes | |
int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions, int fildes, int new fildes); | Добавляє дію dup2 ()в об’єкт дії над файлами, заданий параметром file_actions. В результаті при породженні нового процесу з допомогою цього об’єкту буде створено дублікат файлового дескриптора fildes з використанням дескриптора newfildes | |
int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions, ); | Руйнує об’єкт, заданий параметром file_ actions, що викликає деініціювати даного об’єкту. В подальшому його можемо Ніціювати повторно за допомогою функції posix_spawn_file_actions_init () | |
int posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions, ); | Ініціює об’єкт, заданий параметром file_ actions. Після ініціації цей об’єкт не буде містити дій, передбачених для виконання над файлами | |
Дана структура містить інформацію про стратегії планування, групі процесів, сигнали і прапорці для нового процесу. Нижче подано опис окремих атрибутів цієї структури.
_flags | Використовуються для індикації того, які атрибути процесу повинні бути модифіковані в породженому процесі. Ці атрибути організовано порозрядно за принципом виключного АБО: POSIX_SPAWN_RESETIDS POSIX_SPAWN_SETPGROUP POSIX_SPAWN_SETSIGDEF POSIX_SPAWN_SETSIGMASK POSIX_SPAWN_SETSCHEDPARAM POSIX_SPAWN_SETSCHEDULER |
_pgrg | Ідентифікатор групи процесів, які об’єднуються з новим процесом |
_sd | Подає множину сигналів, які належить опрацювати по замовчуванню новим процесом |
_ss | Подає маску сигналів, яку належить використовувати новим процесом |
_sp | Подає параметр планування, якій належить призначити новому процесу |
_policy | Подає стратегію планування, призначену для нового процесу |
Функції, які використовуються для встановлення і зчитування окремих атрибутів, які містяться в структурі posix_spawnattr_t, подано в табл. 3
Таблиця 3. | Функції, що використовуються для встановлення і зчитування окремих атрибутів структури posix_spawnattr_t | |
Функції | Опис | |
int posix_spawnattr_getflags (const posix_spawnattr_t *restrict attr, short *restrict flags); | Повертає значення атрибута _flags, що зберігається в об’єкті, який задано параметром attr | |
int posix_spawnattr_setflags (posix_spawnattr_t *attr, short flags); | Встановлює значення атрибута _flags, що зберігається в об’єкті, заданому параметром attr, рівним значенню flags | |
int posix_spawnattr_getpgroup (const posix_spawnattr_t *restrict attr, pid_t *restrict pgroup); | Повертає значення атрибута _pgroup, що зберігається в об’єкті, заданому параметром attr, і зберігає його в параметрі pgroup | |
int posix_spawnattr_setpgroup (const posix_spawnattr_t *restrict attr, pid_t *restrict pgroup); | Встановлює значення атрибута _pgroup, що зберігається в об’єкті, заданому параметром attr, рівним параметру pgroup, якщо в атрибуті _flags встановлено признак POSIX_SPAWN _SETPGROUP | |
int posix_spawnattr_getschedparam (const posix_spawnattr_t *restrict attr, struct sched_param*restrict schedparam); | Повертає значення атрибута _sp, що зберігається в об’єкті, який задано параметром attr, і зберігає його в параметрі schedparam | |
int posix_spawnattr_setgetschedparam (posix_spawnattr_t *restrict attr, const struct sched_param *restrict schedparam); | Встановлює значення атрибута _sp, що зберігається в об’єкті, заданому параметром attr, рівним параметру schedparam, якщо в атрибуті _flags встановлено признак POSIX_SPAWN _SETSCHEDPARAM | |
int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *restrict attr, int *restrict schedpolicy); | Повертає значення атрибута _policy, що зберігається в об’єкті, заданому параметром attr, і зберігає його в параметрі schedpolicy | |
int posix_spawnattr_setschedpolicy (posix_spawnattr_t *attr, int schedpolicy); | Встановлює значення атрибута _policy, що зберігається в об’єкті, заданому параметром attr, рівним параметру schedpolicy, якщо в атрибуті _flags встановлено признак POSIX_SPAWN _SETSCHEDDULER | |
int posix_spawnattr_getsigdefault (const posix_spawnattr_t *restrict attr, sigset_t *restrict sigdefault); | Повертає значення атрибута _sd, що зберігається в об’єкті, заданому параметром attr, і зберігає його в параметрі sigdefault | |
int posix_spawnattr_setsigdefault (posix_spawnattr_t *attr, const sigset_t *restrict sigdefault); | Встановлює значення атрибута _ sd, що зберігається в об’єкті, заданому параметром attr, рівним параметру sigdefault, якщо в атрибуті _flags встановлено признак POSIX_SPAWN _SETSIGDEF | |
int posix_spawnattr_getsigmask (const posix_spawnattr_t *restrict attr, sigset_t *restrict sigmask); | Повертає значення атрибута _ss, що зберігається в об’єкті, заданому параметром attr, і зберігає його в параметрі sigmask | |
int posix_spawnattr_setsigmask (posix_spawnattr_t *restrict attr, const sigset_t *restrict sigmask); | Встановлює значення атрибута _ss, що зберігається в об’єкті, заданому параметром attr, рівним параметру sigmask, якщо в атрибуті _flags встановлено признак POSIX_SPAWN _SETSIGMASK | |
int posix_spawnattr_destroy (posix_spawnattr_t *attr); | Руйнує об’єкт, заданий параметром attr. Даний об’єкт можемо в подальшому ініціювати за допомогою функції posix_spawnattr _init () | |
int posix_spawnattr_init (posix_spawnattr_t *attr); | Ініціює об’єкт, заданий параметром attr, значеннями, діючими за умовчуванням для всіх атрибутів, які містяться в цій структурі | |
Приклад використання функції posix_spawn () для створення процесу подано в лістінгу 2.
// Лістінг 2. Породження процесу за допомогою функції posix_spawn (), // яка викликає утиліту ps
# include < spawn.h >
# include < stdio.h >
# include < errno.h >
# include < iostream.h > {
// . . .
posix_spawnattr_t X;
posix_spawnattr_file_actions_t Y;
pid_t Pid;
char *const argv [ ] = { “bin/ps”, “-lf”, NULL};
char *const anvp [ ] = { “PROCESSES = 2”};
posix_spawnattr_init (&X);
posix_spawn_file_actions_init (&X);
posix_spawn (&Pid, “bin/ps”, &Y, &X, argv, envp);
perror (posix_spawn);
cout << “spavned PID: ” << Pid << endl;
// . . .
return (0); }
В лістінгу 2 ініціюються об’єкти posix_spawnattr_t і posix_spawnattr _file _actions_t. Функція posix_spawn () викликається з такими аргументами: Pid, шлях “bin/ps”, Y, Х, масив argv (який містить команду в якості першого елемента і опцію в якості другого) і масив anvp, який містить список змінних середовища. При успішному виконанні функції posix_spawn () значення, що зберігається в параметрі Pid, стане ідентифікатором (PID) породженого процесу, а функція perror () відобразить наступний результат:
posix_spawn: Success
В подальшому буде виведено значення Pid. В нашому випадку породжений процес виконує наступну команду:
bin/ps –lf
При успішному виконанні POSIX-функції повертають (звичайним шляхом) число 0 і в параметрі pid ідентифікатор (id) дочірнього процесу (для батьківського процесу). У випадку невдачі дочірній процес не створюється, отже, значення pid не має змісту, а сама функція повертає значення помилки.
При використанні spawn-функцій помилки можуть виникати на трьох рівнях. По-перше, це можливо, якщо виявляться недійсними об’єкти file_actions або attr objects. Якщо це відбудеться після успішного (нібито) завершення функції (тобто після породження дочірнього процесу), такий дочірній процес може отримати статус зі значенням 127. Якщо помилка пов’язана з функціями керування атрибутами породженого процесу, повертається код помилки, з генерований конкретною функцією (див. табл. 2 і 3). Якщо spawn-функція встигла успішно завершитись, то дочірній процес може мати статус завершення зі значенням 127.
Помилки також виникають при спробі породити дочірній процес. Ці помилки будуть такими ж, як при виконанні функцій fork () і exec (). В цьому випадку вони (помилки) займуть місце значень, які повертаються spawn-функціями. Якщо дочірній процес генерує помилку, батьківський процес не отримує ²поганого повідомлення² автоматично. Для повідомлення батька про помилки дочірнього процесу необхідно використовувати інші механізми, оскільки інформація про це не зберігається в статусі завершення нащадка. З цією метою можемо використати механізм міжпроцесної взаємодії або спеціальний прапорець, що встановлюється дочірнім процесом і видимий для його батька.
3.1. Ідентифікація батьківських та дочірніх процесів за допомогою функцій керування процесами
Існують дві функції, які повертають значення ідентифікатора (PID) процесу, що викликає, і значення ідентифікатора (PPID) батьківського процесу. Функція getpid () повертає ідентифікатор процесу, який викликає, а функція getppid () – ідентифікатор процесу, який є батьківським для процесу, що викликає.
– Конец работы –
Эта тема принадлежит разделу:
Синопсис... pstree a c h frac Hpid l n p u G frac U... pid frac user...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Синопсис
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов