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

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

Синопсис

Синопсис - раздел Образование, Лекція 4 5 Створення процесу # Include <unistd> Pid_T Fork (Void); Невдале Виконан...

# include <unistd>

pid_t fork (void);

Невдале виконання функції fork () можливе у випадку, коли система не володіє ресурсами для створення ще одного процесу. Це відбувається при пере­вищенні обмежень (якщо вони існують) на кількість дочірніх процесів, які мо­же породжувати батько, або на кількість процесів, які виконуються в межах всієї системи. В цьому випадку встановлюється змінна error, яка означає наяв­ність помилки.

2.2. Системні функції exec

Сімейство функцій exec призначене для заміни образу процесу, який йо­го викликає, образом нового процесу. При виклику функції fork () створює­ть­ся новий процес, який точною копією батьківського процесу, а функція exec () замінює образ ²скопійованого² процесу образом копії. Образ нового процесу є звичайний виконуваний файл, який миттєво завантажується на виконання. Цей файл можемо задати за допомогою імені і шляху доступу до нього. Функції сі­мейства exec можуть передавати новому процесу аргументи командної стрічки, а також встановити змінні середовища. Якщо функція виконалася успішно, во­на не повертає ніякого значення, оскільки образ процесу, який містить звертан­ня до функції exec, вже пере записано. У випадку невдачі процесу, який вик­ли­кає, повертається число -1. Всі функції exec () можуть мати невдале закінчення при наступних умовах:

· дозволи не визнано;

дозвіл на пошук відкидається для каталогу файлів, що виконуються;

дозвіл на виконання відкидається для файлу, який виконується;

· файли не існують;

файл, який виконується не існує;

каталог не існує;

· файл неможливо виконати;

файл неможливо виконати, оскільки він відкритий для запису іншим процесом;

файл не є виконуваним;

· проблеми з символічними посиланнями;

при аналізі шляху до файлу, що виконується, символічні посилання створюють цикл;

символічні посилання роблять шлях до файлу, який виконується, надто довгим.

Функції сімейства exec використовуються разом з функцією fork (). Фун­кція fork () створює та ініціює дочірній процес ²за образом і подібністю² бать­кі­вського. Образ дочірнього процесу в подальшому замінює образ свого предка за допомогою виклику функції exec (). Приклад використання функцій fork () і exec () показано в лістінгу 1.

// Лістінг 1. Використання системних функцій fork () і exec ()

// . . .

RtValue = fork ();

if (RtValue = = 0) {

execl (²/path/direct², ²direct², ² . ²);

}

В лістінгу 1 показано виклик функції fork (). Значення, які вона повер­тає, зберігається у змінній RtValue. Якщо значення RtValue рівне 0, отже, це – дочірній процес, і в ньому викликається функція execl () з параметрами. Пер­ший параметр містить шлях до модуля, який виконується, другий – інструкцію, для виконання, третій – аргумент. Другий параметр, direct, являє собою ім'я утиліти, яка перераховує всі каталоги і підкаталоги з даного каталогу. Всього існує шість версій функції exec, передбачених для використання різних угод про виклики.

 

2.3. Функції execl ()

Функції execl (),execle () і execlp () передають функції командної стрічки у вигляді списку. Кількість аргументів командної стрічки повинна бути відома під час компіляції.

· int execl (const char *path, const char *arg0, . . ./*, (char *)0 */);

Тут path – дорожнє (шляхове) ім'я програми, яка виконується. Його мо­жна подати у вигляді повного складеного імені або відносного складеного імені з біжучого каталогу. Наступні параметри є списком аргументів командної стрі­ч­ки, від arg0 до argn. Всього може бути n аргументів. Даний список завер­шу­є­ть­ся NULL-вказівником.

· int execle (const char *path, const char *arg0, . . ./*, (char *)0 *, char * const envp[]*/);

Дана функція аналогічна функції execl () з однією відмінністю: вона має додатковий параметр, envp[]. Цей параметр вказує на нове середовище для нового процесу, тобто envp[] – це вказівник на стрічковий масив з завершаль­ним нульовим символом. Кожна його стрічка, також завершується нульовим символом, має наступну форму

name = value

Тут name – ім'я змінної середовища, а value – стрічка що зберігається. Значення параметру envp[] можемо присвоїти наступним чином:

char *const envp[]={“PATH=/opt/kde2:/sbin”, “HOME = /home”, NULL};

Тут PATH і HOME – змінні середовища.

· int execlp (const char *fale, const char *arg0, . . ./*, (char *)0 */);

Тут fale – ім'я програми, яка виконується. Для визначення місця знахо­дження програм, що виконуються, використовується змінна середовища PATH. Останні параметри є списком аргументів командної стрічки (дивись опис фун­кції execl ()).

Приклад застосування синтаксису функції execl () зрізними аргумента­ми:

char *const args[] = {“direct”, “.”, NULL};

char *const envp[] = {“fales=50”, NULL};

execl (“path/direct”, “direct”, “.”,NULL);

execle (“path/direct”, “direct”, “.”,NULL, envp);

execlp (“direct”, “direct”, “.”,NULL);

Тут в кожному прикладі виклику execl-функції активізований процес викликає програму direct.

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

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

Лекція 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.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 > 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

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

Синопсис
# 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
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги