Реферат Курсовая Конспект
Синопсис - раздел Образование, Лекція 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.
– Конец работы –
Эта тема принадлежит разделу:
Синопсис... pstree a c h frac Hpid l n p u G frac U... pid frac user...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Синопсис
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов