рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Синопсис

Синопсис - раздел Образование, Лекція 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); Встановлює значення атрибута _pgro­up, що зберігається в об’єкті, заданому параметром 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, рівним параметру sched­param, якщо в атрибуті _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); Встановлює значення атрибута _poli­cy, що зберігається в об’єкті, заданому параметром 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 () – ідентифікатор процесу, який є батьківським для процесу, що викли­кає.

– Конец работы –

Эта тема принадлежит разделу:

Лекція 4 5 Створення процесу

Синопсис... pstree a c h frac Hpid l n p u G frac U... pid frac user...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Синопсис

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Створення процесу
Відношення між батьківським і дочірнім процесами;

Відношення між батьківським та дочірніми процесами
Процес, який створює, або породжує, інший процес, є батьківським (parent) процесом по відношенню до породженого, або дочірнього (child) проце­су. Процес init – батьківський (або предок) всіх

Використання системних функцій
2.1. Системна функція fork () Системна функція (або системний виклик) fork () створює новий процес, який є дублікатом процесу який його викликав, тобто його батька. При успіш­ному виконанн

Синопсис
# include <unistd> pid_t fork (void); Невдале виконання функції fork () можливе у випадку, коли система не володіє ресурсами для створення ще одного процесу. Це відбувається

Синопсис
# include <unistd.h int execl (const char *path, const char *arg0, . . ./*, (char *)0 */); int execle (const char *path, const char *arg0, . . ./*, (char *)0 *, char * const en

Синопсис
# include < unistd.h > long sysconf (int name); Ще одним обмеженням при використанні функцій сімейства exec та інших функцій, які застосовуються для створення процесів, є ма

Синопсис
# include < stdlib.h > char *getenv ( const char *name ); int setenv (const char *name, const char *value, int overwrite ); void unsetenv ( const char *name );

Синопсис
# include < stdlib.h > int system (const char *string); В якості параметру string можемо передати системну команду або ім'я файлу, який виконується. При вдалому виконанні фу

Використання POSIX-функцій для породження процесів
Подібно створенню процесів за допомогою функцій system () і fork- exec, функцій posix_spawn () створюють нові дочірні процеси із заданих образів про­цесів. Однак функції posix_spawn () дозволяють п

Завершення процесу
Коли процес завершується, його блок БУП руйнується, а адресний прос­тір, який він займав і ресурси звільняються. Код завершення розміщується в головну таблицю процесів. Як тільки батьківський проце

Синопсис
# include < stdlib.h > void exit (int status); void abort (void); Функцію kill () можемо використати для примусового завершення іншо­го процесу. Дана функція відпра

Ресурси процесу
При виконанні призначених на процес задач часто приходиться запису­вати дані у файл, відправляти їх на принтер або відображати отримані результа­ти на екран. Процесу можуть знадобитися дані, що вво

Синопсис
# include < sys/resource.h > int setrlimit (int resource, const struct rlimit *rlp); int getrlimit (int resource, struct rlimit *rlp); int getrusage (int who, struc

Синопсис
# include < sys/wait/h > pid_t wait (int *status); pid_t waitpid (pid_t pid, int *status, int oрtions); Функція waitpid () аналогічна функції wait () за виключенням

Розбиття програми на задачі
Аналізуючи розбиття програми на декілька задач, ми робимо перший крок до реалізації паралелізму в свою програму. В одно процесорному середо­вищі паралелізм реалізується засобами багатозадачності. Ц

Лінії видимого контуру
Породження процесі, як подано в лістінгу 6, можливе за допомогою фу­нкцій, які викликаються із функції mane (). // Лістінг 6. Основна гілка програми, з якої викликається функція,

Висновки
Паралелізм в С++ програмі досягається за рахунок поділу на декілька процесів або декілька потоків. Процес – це ²одиниця роботи², що реалізується операційною системою. Якщо програма – це а

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги