Оператор чисельногочисленного вибору case



Міністерство освіти і науки, молоді та спорту України

ОДЕСЬКА ДЕРЖАВНА АКАДЕМІЯ ХОЛОДУ

 

 

 

Швець Н.В.

 

 

системне програмне забезпечення

 

 

Посібник до виконання лабораторних робіт

 

Одеса 2011

Укладач:  Швець Наталія Василівна,
старший викладач кафедри Інформаційних технологій

 

 

Посібник розглянуто й рекомендовано до видання на засіданні кафедри Інформаційних технологій

Протокол № ___                          від     “___” ______________ 2011 р.

 

Завідувач кафедри ІТ, д.т.н., професор                         В. М. Плотніков

 

 

Затверджено методичною комісією Факультету інформаційних технологій

Протокол № ____                        від     “____” _____________ 2011 р.

 

Голова методичної комісії, к.т.н., доц.                           Ю.К.Корнієнко

 

.

 

 

Зміст

Анотація.................................................................................................................................... 4

Вступ.......................................................................................................................................... 4

Лабораторна робота № 1..................................................................................................... 5

Перенаправлення уведення-виведення в OC UNIX. Конвеєри................................... 5

Лабораторна робота № 2..................................................................................................... 8

Командна мова ОС UNIX SHELL...................................................................................... 8

Лабораторна робота №3................................................................................................... 14

Команди управління процесами...................................................................................... 17

Лабораторна робота № 4.................................................................................................. 20

Асинхронне видалення дочірніх процесів за допомогою сигналу SIGCHLD. Потоки, що повертають значення      20

Лабораторна робота № 5.................................................................................................. 21

Розробка багатофайлових програм Використання утиліти make......................... 21

Лабораторна робота № 6.................................................................................................. 24

Взаємодія процесів. Розподілювана пам’ять. Семафори.......................................... 24

Лабораторна робота № 7.................................................................................................. 30

Взаємодія процесів. Програмні канали.......................................................................... 30

Лабораторна робота № 8.................................................................................................. 32

Розробка графічного інтерфейсу за допомогою бібліотеки Qt3. Створення в KDevelop базової структури додатку 32

Література.............................................................................................................................. 34

 

Анотація

Посібник має метою забезпечити студентів методичними вказівками до виконання лабораторних робіт, які складають составну частину учбово-методичного комплексу з дисципліни «Системне програмне забезпечення». Дисципліна викладається на III курсі студентам напряму 0804 за спеціальностями 6.080401 «Інформаційні управляючі системи та технології» і 6.080402 «Інформаційні технології проектування» і сприяє підвищенню рівня знань і навчальних умінь студентів.

Вступ

Метою дисципліни є надання студентам систематизованого уявлення про принципи побудови, проектування и використання системного програмного забезпечення (СПЗ) для сучасних ПЕОМ та обчислювальних систем. У курсі викладаються основні принципи організації файлової системи, уведення-виведення, управління ресурсами і сінхронізацією процесів..

Завдання курсу - розглянути основні “активні” компоненти операційних систем: процеси і потоки, керування пам’яттю, файлові системи, засоби уведення-виведення.

Перелік тем лабораторних робіт, наданих у посібнику, базується на матеріалах учбової програми з дисципліни і відповідає виконанню умов щодо обсягу. Для наведення прикладів стосовно генерації коду використовується мова програмування С.

Виконання лабораторних робіт переслідує наступні цілі:

закріплення знань, які студенти придбали під час вивчення даної дисципліни;

придбання практичних навичок в розробці програм з використанням засобів взаємодії процесів, які надає ОС UINIX.

При виконанні лабораторних робіт студенти повинні:

знати:

основні теоретичні положення стосовно теми лабораторної роботи;

основи програмування мовою С.

вміти:

реалізувати поставленні завдання в операційному середовищі ОС Linux.

Лабораторна робота № 1

Перенаправлення уведення-виведення в OC UNIX. Конвеєри

Проведення заняття розраховано на 2 години

Мета роботи: отримати практичні навички по використанню можливостей введення-виведення і організації конвеєра.

Теоретичні відомості:

У ОС Linux існує три стандартних потоки:

• потік уведення – стандартне уведення (вхід) stdin здійснюється з клавіатури терміналу;

• потік виведення – стандартний вивод (вихід) stdout направлений на екран терміналу;

• потік стандартного протоколу (потік помилок) – стандартний файл діагностичних повідомлень stderr.

Перенаправлення потоків дозволяє змінити стандартне уведення-виведення і позначається таким чином:

< - зміна джерела стандартного введення;

> >> - зміна приймача стандартного виведення.

Команда, яка може працювати із стандартним входом і виходом, називається фільтром.

Наприклад:

$cat>filename

- це перенаправлення виведення програми cat у файл filename (якщо цей файл існує, то його колишній вміст буде загублено).

$cat>>filename

- додати вміст виведення програми cat до вмісту файлу filename.

$cat<filename

- сформувати стандартне введення програми cat з вмісту файлу filename.

Стандартні потоки мають фіксовану нумерацію:

• потік уведення – 0;

• потік виведення – 1;

• потік помилок – 2.

Ці номери дескрипторів можна використовувати в явному вигляді. Наприклад, запис

prog 1>file

еквівалентна запису

prog>file

Для того, щоб відрізнити ім'я потоку від імені файлу, перед номером потоку ставиться символ &.

prog >file 2> &1

Тут відбувається перенаправлення стандартного потоку виведення у файл file (>file). А крім того, повідомлення про помилки так само будуть перенаправлені в file: запис 2> &1 означає перенаправлення потоку помилок на стандартний потік виведення, який, у свою чергу, був перенаправлений у файл.

Аналіз команди здійснюється інтерпретатором справа наліво: спочатку відбувається злиття потоків (2> &1), а потім перенаправляється стандартний потік виведення (1) у файл file.

Засіб, об'єднуючий стандартний вихід однієї команди із стандартним входом іншої називається конвейєром (або каналом) і позначається вертикальною межею |.

Запуск процесів у вигляді

$ процесс_1| процесс_2| . | процесс_n

означає, що:

• стандартне виведення процесса_1 буде замкнуте на стандартне уведення процесса_2;

• стандартне виведення процесса_2 буде замкнуте на стандартне уведення процесса_3;

• і т.д.

При цьому спочатку створюється канал, а потім на виконання одночасно запускаються всі процеси, і загальний час їх виконання визначається повільнішим процесом.

Наприклад:

$ls|wc –l

Команда ls виводить на екран (стандартний потік виведення) список файлів поточного каталога, а команда wc –l рахує кількість рядків у вхідному потоці (у файлі, а якщо файл не зуказан – в стандартному вхідному потоці) .Таким чином, об'єднання цих двох команд програмним каналом дозволяє порахувати кількість файлів в поточному каталозі.

Ті ж дії можна організувати і так:

$ls>buffer

$wc –L<buffer

$rm –f buffer

Конвейєром можна об'єднувати і більше двох команд, коли всі вони, можливо окрім першої і останньої, фільтри.

Завдання 1:Використовуючи відповідні команди, отримати наступну інформацію:

Ім'я каталога, в якому знаходитеся в даний момент;

Хто працює в системі;

Поточні час і дату;

Відсоток зайнятості дискової пам'яті;

Завдання 2:

Створити календар на поточний день ;

Створити календар на рік і місяць вашого народження;

Об'єднати отримані файли і результат записати у файл.

Завдання 3:

У змісті поточного каталога пронумерувати рядки;

Відсортувати в зворотному порядку;

Переглянути і зберегти в результуючому файлі.

Завдання 4:

Продемонструвати перенаправлення потоку видачі діагностичних повідомлень у файл.

Рекомендації до виконання|:

Для роботи з вбудованим календарем можна використовувати команду: cal місяць рік За умовчанням береться поточний місяць і рік. Наприклад:

cal (швидкий перегляд календаря поточного місяця);

cal 2005 (виводить календар на 2005 рік);

cal 12 (виводить календар на грудень поточного року).

free виводить інформацію по пам'яті;

df –h

Виводить інформацію про вільне і використовуване місце на дисках.

Контрольні питання:

1. Які стандартні потоки підтримуються в UNIX?

2. Для чого використовується перенаправлення потоків, яким чином вказується в команді?

3. Що таке фільтр?

4. Як перенаправити повідомлення про помилку у файл?

5. Що таке конвейєр? Для чого він призначений?

 

Лабораторна робота № 2

Командна мова ОС UNIX SHELL

Проведення заняття розраховано на 4 години

Мета роботи:Отримати тримати практичні навички навички по програмуванню з використанням можливостей командної мови SHELL

Теоретичні відомості:

 Інтерпретатор SHELL

Інтерпретатор SHELL є оболонкою над всією операційною системою і виконує інтерфейсні функції між користувачем і ОС. Він перехоплює і інтерпретує всі команди користувача: формує і виводить у відповідь повідомлення.

Крім запуску на виконання стандартних команд UNIX і виконуваних файлів, інтерпретатор включає власну мову, яка по своїх можливостях наближається до високорівневих мов програмування. Ця мова дозволяє створювати програми (SHELL-файли), які можуть включати оператори мови і команди UNIX. Такі файли не вимагають компіляції і виконуються в режимі інтерпретації, але вони повинні володіти правом на виконання (встановлюється за допомогою команди chmod).

Процедурі SHELL можуть бути передані аргументи при запуску. Кожному з перших дев'яти аргументів ставиться у відповідність позиційний параметр від $1 до $9 ($0 – ім'я самої процедури), і по цих іменах до них можна звертатися із тексту процедури.

Перш, ніж почати розгляд деяких операторів SHELL, .слід звернути увагу на використання в командах деяких символів:

\ знак відміни спеціального символу переведення переведення рядка, наступного безпосередньо услід за цим знаком.

‘ одинарні лапки: використовуються для обрамлення тексту: передаваного як єдиний аргумент команди.

«» подвійні лапки, використовуються для обрамлення тексту, що містить імена змінних для підстановки ($имя) або стандартні команди, поміщені в символи тупого наголосу (`команда`).

`` символи тупого наголосу, служать для виконання команди, поміщеної між ними.

echo виведення повідомлень.

Приклад: Уведення-виведення на екран вмісту поточного каталогу.

Echo «Поточний каталог: \

`pwd` \

`ls`»

Буде виведено:

Поточний каталог: им’я_каталога

файл_1

файл_2

. . . . . .

Змінні мови SHELL

Мова SHELL дозволяє працювати із змінними (без попереднього оголошення). Імена змінних починаються з букви і можуть включати букви і цифри. Звернення до змінних починається з знаку $.

Приклад: Перехід до початкового каталога користувача.

$cd $HOME

Оператор присвоєння

Присвоєння значень змінним здійснюється за допомогою оператора ‘=’ без пропусків.

Приклад. S=Hello

echo $s

Обчислення виразів

Здійснюється за допомогою команди expr і операторів:

арифметичних логічних

+ складання = рівно

- віднімання !- не рівно

\* множення \< менше

/ ділення \<= менше або рівно

% залишок від ділення \> більше

\>= більше або рівно

Результат операцій порівняння - виведення виведення 1 (true) або 0 (false). Всі оператори і імена змінних повинні відокремлюватися відокремлюватися один від одного пропусками.

Приклад:

a=5 b=12

a=’expr $a + 4’

d=’expr $b - $a’

echo $a $b $d

Буде виведено:

9 12 3

Умовні вирази

Розгалуження обчислювального процесу здійснюється за допомогою оператора if:

if список_команд1

then список_команд2

[else список_команд3]

fi

Список_команд - це одна або декілька команд (для задавання задавання пустого пустого списку використовується двокрапка - ‘:’). Список_команд1 передає оператору if код повернення останньої команди з списку. Якщо він рівний 0, то виконуються команди з список_команд2, таким чином нульовий код повернення еквівалентний значенню «істина». Інакше виконуються команди з список_команд3, якщо він існує.

Перевірка умови може здійснюватись за допомогою команди test. Аргументами цієї команди можуть бути імена файлів, числові і нечислові рядки. Вона використовується в слідуючих слідуючих режимах:

· перевірка файлів: test -ключ имя_файла

Ключі: -r файл існує і доступний для читання;

-w файл існує і доступний для запису;

-x файл існує і доступний для виконання;

-f файл існує і має тип ‘-‘, тобто це звичайний файл;

-s файл існує, має тип ‘-‘ і не пустий;

-d файл існує і має тип ‘d‘, тобто це каталог.

· порівняння чисел: test число1 -ключ число2

Ключі: -eq рівне;

-ne не рівно;

-lt менше;

-le менше або рівно;

-gt більше

-ge більше або рівно.

· порівняння рядків:

test [-n] рядок рядок непорожній;

test -z рядок рядок пустий пустий;

test строка1 = строка2 рядки рівні;

test строка1 != строка2 рядки не рівні.

Приклад:

# Оцінка досягнень

echo «Яку оцінку Ви одержали на іспиті?»

read z

if [ $z = 5 ]

then echo Молодець!

elif [ $z = 4 ]

    then echo «Все одно молодець!»

    elif [ $z = 3 ]

          then echo «Все одно!»

          elif [ $z = 2 ]

                then «Все!»

                else echo !

fi

Оператор чисельногочисленного вибору case

Оператор case має слідуючий слідуючий формат:

case рядок in

шаблон) список команд ;;

шаблон) список команд ;;

шаблон) список команд ;;

............

Esac

Звичайно останній рядок вибору має шаблон *, що в структурі case означає будь-яке значення. Цей рядок вибирається, якщо не відбувся збіг ні з одним з раніше записаних шаблонів, обмежених дужкою ). Значення є видимими у порядку запису.

Приклад:

# Оцінка досягнень

echo «Яку оцінку Ви одержали на іспиті?»

read z

case $z in

5) echo «Молодець!»;;

4) echo «Все одно молодець!»;;

3) echo «Все одно!»;;

2) echo «Все!»;;

*) echo !

esac

Побудова циклів

У мові SHELL є три типу циклів: while, until і for.

Цикл while

while список_команд1{;| переведенняпереведення рядка}

do список_команд2{;| переведення переведення рядка}

done

У умові враховується код повернення останньої виконаної команди з список_команд1, при цьому 0 інтерпретується як «істина».

Цикл until

until список_команд1{;| переведення переведення рядка}

do список_команд2{;|переведення переведення рядка}

done

Перевірка умови виконується перед виконанням циклу. Враховується код повернення останньої виконаної командиз список_команд1, при цьому цикл виконується до тих пір, поки код повернення не прийме значення «істина».

Цикл for

for змінна [in список_значень]{;| переведення переведення рядка}

do список_команд{;переведення переведення рядка}

done

Змінній присвоюється значення чергового слова з список_значень і для цього значення виконується список_команд. Кількість ітерацій рівна кількості ланцюжків символів в списке_значень, розділених пропусками. Якщо слово in і список_значень опущені як необов'язкові, то змінній по черзі присвоюються значення параметрів, переданих при запуску даної програми. Список можна використовувати як шаблони імен файлів, тоді інтерпретатор перетворює цей шаблон на потрібний синтаксисом список імен файлів, що задовольняє шаблону.

Приклад: Друк списку імен текстових файлів з поточного каталога.

list=`ls *.txt`

for val in $list

do

echo «$val»

done

Завдання 1:Створити командний файл, в якому:

Виводиться на екран ім'я командного файлу;

Виводиться вміст файлу (файл повинен існувати), ім'я якого передається першим параметром командного файлу, його рядки нумеруються, сортуються в зворотному порядку, зберігаються у файлі і відображуються відображуються на екрані;

Створюється з клавіатури і відображується відображується на екрані файл, ім'я якого задається другим параметром командного файлу.

 

Завдання 2:Створити командний файл, що реалізовує меню з трьох пунктів:

1-й пункт – вивести на екран ім'я користувача і ім'я поточної директорії;

2-й пункт – вивести інформацію про дискову і оперативну пам'ять в даній системі;

3-й пункт – підтвердження.

Завдання 3:Створити командний файл, що видаляє всі файли поточного каталога в диалоговому режимі.

Завдання 4:Створити командний файл, який:

· Через вхідні параметри приймає від одного до декількох файлів;

· Відображує на екрані їх вміст;

· Сортує в зворотному порядку;

· Відображує на екрані відсортований файл і зберігає його у файлі з тим же ім'ям, додаючи суфікс _sorted.

 

Лабораторна робота №3

Процеси в UNIX

Проведення заняття розраховано на 4 години

Мета роботи:Ознайомлення з процесами OC UNIX і з сигналами як засобом комунікації процесів, придбання знань і навичок навичок написання програм роботи з взаємодіючими процесами.

Теоретичні відомості:

Процес в UNIX (як і в UNIX) – це програма, яка виконується в окремому віртуальному адресному просторі. Коли користувач реєструється в системі, під нього автоматично створюється процес, в якому виконується оболонка (SHELL). У UNIX підтримується класична схема мультипрограмування. При цьому UNIX підтримує паралельне (або квазіпаралельне за наявності тільки одного процесора) виконання процесів користувача. Кожен процес виконується у власному віртуальному адресному просторі, тобто процеси захищені один від одного і крах одного процесу ніяк не вплине на процеси, що виконуються, і на всю систему в цілому.

Один процес не може прочитати що-небудь з пам'яті іншого процесу (або записати в неї) без «дозволу» на те іншого процесу. Санкціонована взаємодія процесів допускається системою.

Ядро надає системні виклики для створення нових процесів і для управління породженими процесами. Будь-яка програма може почати виконуватися, тільки якщо другий процес її запустить або відбудеться якесь переривання (наприклад, від зовнішнього пристрою).

У зв'язку з розвитком SMP (Symmetric Multiprocessor Architectures) в ядро UNIX був упроваджений механізм нитокабо потоківуправління (threads). Іншими словами, нитка– це процес, який виконується у віртуальній пам'яті, який використовується разом з іншими нитками одного і того ж «ваговитого» процесу, який володіє окремою віртуальною пам'яттю. Такий «ваговитий» процес може мати декілька «легковагих» процесів. Простіше кажучи, нитки – це паралельно виконувані частини однієї програми, що реалізовуються UNIX у вигляді декількох процесів з спеціальним прапором. Причому всі ці процеси виконуються в одному віртуальному адресному просторі (у одному середовищі) процесу-батька.

Потоки (або нитки) дозволяють вирішувати в рамках однієї програми одночасно декілька задач.

Операційна система надає програмі певний інтервал процесорного часу. Коли програма переходить в режим очікування якої-небудь події (наприклад, сигналу) або звільняє процесор, операційна система передає управління іншій програмі. Розподіляючи час центрального процесора, операційна система розподіляє його не між програмами, а між потоками.Виходячи зі всього цього, потоки –це набори команд, що мають можливість одержувати час процесора. Час процесора виділяється квантами. Квант –це мінімальний час, впродовж якого потік (нитка) може використовувати процесор.

Коли ви вводите команду, інтерпретатор проводить пошук вказаної програми в каталогах, які перераховані при визначенні змінної оточення PATH. При цьому буде виконана перша знайдена програма з вказаним ім'ям.

Якщо інтерпретатору (SHELL) зустрічається команда, відповідна виконуваному файлу, інтерпретатор виконує її, починаючи з точки входу (entry point). Для С-программ entry point - це функція main. Точка входу для кожного середовища розробки різна. Запущена програма також також може створити процес, тобто запустити якусь програму і її виконання також також почнеться з функції main.

Потім за допомогою системного виклику fork() створюється адресний простір – готується «місце» для нового процесу, а потім за допомогою виклику exec() у цей адресний простір завантажується програма. Таким чином, кожен новий процес виконується в своєму індивідуальному середовищі.

Для створення процесів використовується системний виклик fork(). Виклик fork() створює новий адресний простір, який повністю ідентичен адресному простору основного процесу. Іншими словами, fork() создає новий процес, після виконання цього системного виклику ви одержуєте два абсолютно однакових процеси – основний і породжений. Функція fork() повертає 0в породженому процесі і PID (Process ID – ідентифікатор породженого процесу) - в основному. PID – це ціле число.

Тепер, коли процес створений, можна запустити в ньому програму за допомогою виклику exec().Параметрами функції exec() є  ім'я виконуваного файлу і, якщо потрібно, параметри, які будуть передані цій програмі. У адресний простір, породжений за допомогою fork() процесу буде завантажена програма і її виконання почнеться з точки входу (адреса функції main).

Як приклад розглянемо цей фрагмент програми:

if(fork()==0)

wait();

else

exec(«ls»,»l»,0); /*породжений процес*/

Тепер розглянемо детальніше. Що ж робиться при виконанні виклику fork():

Виділяється пам'ять для описувача нового процесу в таблиці процесів.

Призначається ідентифікатор процесу PID.

 

Створюється логічна копія процесу, який виконує fork() – повне копіювання вмісту віртуальної пам'яті батьківського процесу, копіювання складових ядерного статичного і динамічного контекстів процесу-предка.

Збільшуються лічильники відкриття файлів (породжений процес успадковує всі відкриті файли батьківського процесу).

Повертається PID в точку поверненняз системного виклику в батьківському процесі і 0 - в процесі-нащадку. У разі неможливості створити процес повертається негативне значення PID.

Загальна схема управління процесами.

Кожен процес може породжувати повністю ідентичний процес за допомогою fork(). Батьківський процес може чекати закінчення виконання всіх своїх процесів-нащадків за допомогою системного виклику wait().

У будь-який момент часу процес може змінити вміст свого образу пам'яті, використовуючи один з різновидів виклику exec(). Кожен процес реагує на сигнали і, природно, може встановити власну реакцію на сигнали, вироблювані операційною системою. Пріоритет процесу може бути змінений за допомогою системного виклику nice().

Сигнал –це спосіб інформування процесу ядром про випадок випадок якоїсь події. Якщо виникає декілька однотипних подій, процесу буде поданий тільки один сигнал. Сигнал означає, що відбулася подія, але ядро не повідомляє, скільки таких подій відбулося.

Приклади сигналів:

Закінчення породженого процесу (наприклад, із-за системного виклику exit()).

Виникнення виняткової ситуації.

Сигнали, що надходять надходять від користувача при натисненні певних клавіш.

Встановити реакцію на надходження сигналу можна за допомогою системного виклику signal():

func=signal(snum,function);

де:

snum –номер сигналу;

function – адреса функції, яка повинна бути виконана під час вступу вказаного сигналу.

Повертане значення – адреса функції, яка реагуватиме на надходження сигналу. Замість function можна вказати нуль або одиницю.

Якщо був вказаний нуль, то під час вступу сигналу snum виконання процесу буде перервано аналогічно виклику exit(). Якщо вказати одиницю, даний сигнал буде проігнорований, але це можливо не для всіх процесів.

За допомогою системного виклику kill() можна згенерувати сигнали і передати їх іншим процесам. Звичайно kill() використовується для того, щоб примусово завершити («вбити») процес.

kill(pid,snum);

де:

pid – ідентифікатор процесу;

snum – номер сигналу, який буде переданий процесу.

Номери і назви всіх допустимих сигналів описані у файлі signal.h. Назви і номери сигналів можна одержати з довідника.

Для нормального завершення процесу використовується виклик:

exit(status);

де:

status – ціле число, повертане процесу-предку для інформування його про причини завершення процесу-нащадка.

Виклик exit() може задаватися в будь-якій точці програми, але може бути і неявним, наприклад, при виході з функції main()(при програмуванні на С) оператор return 0;буде сприйнятий як системний виклик exit(0).

Команди управління процесами

Команда ps

Команда ps призначена для виведення інформації про виконуваних у нинішній момент часу процесах.

Дана команда має багато параметрів. Ось найбільш часто використовувані з них:

Параметр Опис
-a Відображувати ідображувати всі процеси, пов'язані з терміналом (Відображуються відображуються процеси всіх користувачів)
-e Відображувати всі процеси
-t список_терминалов Відображувати процеси, пов'язані з вказаними терміналами
-u ідентифікатори _пользователей Відображувати відображувати процеси, пов'язані з даними ідентифікаторами
-g идентификаторы_групп Відображувати процеси, пов'язані з даними ідентифікаторами груп
-x Відображувати ідображувати всі процеси, не пов'язані з терміналом

Наприклад

ps –ax|grep httpd

Буде відображена інформація, про всі процеси, що містять в рядку запуску «httpd».

Команда top

Ця команда призначена для виведення інформації про процеси у реальному часі. Процеси сортуються по максимальному займаному процесорному часу. Команда також повідомляє про вільні системні ресурси. Існує графічний аналог програми top - gtop

Команда nice

Формат використання:

nice [коефіцієнт пониження] команда [аргумент]

Команда nice виконує вказану команду з зниженим пріоритетом, коефіцієнт зниження указується в діапазоні 1.19 (за умовчанням він рівний 10). Суперкористувач може підвищувати пріоритет команди, для цього потрібно вказати негативний коефіцієнт, наприклад -10. Якщо вказати коефіцієнт 19, то він розглядуватиметься розглядуватиметься як 19.

Команда nohup

Формат використання:

nohup команда [аргумент]

Команда nohup виконує запуск команди в режимі ігнорування сигналів. Не ігноруються тільки сигнали SIGHUP і SIGQUIT.

 

Команда kill

Формат використання:

kill [-номер сигналу] PID

де PID – ідентифікатор процесу, який можна дізнатися за допомогою команди ps.

Команда kill служить для примусового завершення процесу. При цьому процесу з вказаним ідентифікатором (PID) посилається сигнал завершення. Як параметр можна вказати номер сигналу, який слід посилати. За умовчанням відсилається сигнал SIGTERM.

 

Команди jobs, fg, bg

Команда jobs виводить список процесів, які виконуються у фоновому режимі, fg переводить процес в нормальний режим ( на передній план - foreground), а bg – у фоновий.

Запустити програму у фоновому режимі можна за допомогою конструкції <команда> &

Завдання 1:Породження процесів. Написати програму, яка:

в результаті виконання породить три процеси (процесс-предок1 і процеси-нащадки2 і 3).

програма повинна виводити на екран ідентифікатори процесів у разі успіху;

виводити на екран повідомлення про неможливість створення процесу.

Завдання 2:Написати програму, яка запускає команду ls –l /, створюючи процес за допомогою системної функції system().

Завдання 3:Написати програму, яка запускає команду ls –l /, використовуючи системні функції fork() і exec().

 

Лабораторна робота № 4

Асинхронне видалення дочірніх процесів за допомогою сигналу SIGCHLD. Потоки, що повертають значення

Проведення заняття розраховано на 4 години

 

Мета роботи:отримати практичні навички навички по організації видалення дочірніх процесів за допомогою сигналу SIGCHLD і написанню програм, що використовують потоки, що повертають значення

Завдання 1:Розробити програму, що демонструє видалення дочірніх процесів за допомогою обробки сигналу SIGCHLD.

Завдання 2:Написати програму, в якій реалізований потік повертає 5000-е просте число.

Рекомендації до виконання:

Сигнали - це механізм зв'язку між процесами. Всі вони розпізнаються по номерах, але в програмах для посилання на сигнали використовують символічні константи. У UNIX ці константи визначені у файлі /usr/include/bits/signum.h. У програмі для посилання на сигнали потрібно підключати файл <signal.h>.

Сигнал SIGCHLD посилається якраз тоді, коли завершується дочірній процес. Сигнал є спеціальним повідомленням, що посилається процесу. У відповідь на одержаний сигнал процес виконує ряд дій залежно від типу сигналу. Правила обробки сигналу визначає функція sigaction(), одержуюча три параметри: номер сигналу і два покажчики на структуру sigaction. Найбільш важливим полем структури sigaction є поле sa_handler, яке може приймати одне з трьох значень:

SIG_DFL – вибір стандартного обробника сигналу;

SIG_IGN – ігнорування сигналу;

покажчик на функцію обробки сигналу. Ця функція повинна приймати один параметр ( номер сигналу) і повертати значення типу void.

Якщо обробник використовує як яку-небудь змінну прапора надходження сигналу, то вона повинна мати спеціальний тип sig_atomic_t.

Потоки, як і процеси, - це механізм, що дозволяє програмам виконувати декілька дій одночасно. Потоки працюють паралельно. Ядро UNIX планує їх роботу асинхронно, перериваючи час від часу кожний з них, щоб дати шанс іншим. Всі функції і типи даних для роботи з потоками описані у файлі <pthread.h>. Кожному потоку в процесі призначається свій ідентифікатор, при посиланні на який в програмах потрібно використовувати тип даних pthread_t. Для створення потоку використовується функція pthread_create(). Для знищення потоку використовують функцію pthread_join().

Контрольні питання:

1. Оскільки сигнал може прийти у будь-який момент, він може застати програму за виконанням критичної операції, що не має на увазі переривання. Тому обробник сигналу повинен виконувати мінімум дій у відповідь на отримання сигналу і щонайшвидше повертати управління в програму. Які дії звичайно програмуються в обробнику сигналу?

2. У чому полягає особливість змінних типу sig_atomic_t?

3. Назвіть параметри функцій pthread_create() і pthread_join().

 

Лабораторна робота № 5

Розробка багатофайлових програм
Використання утиліти make

Проведення заняття розраховано на 4 години

Мета роботи:придбання практичних навиків створення багатофайлових програм, використання утиліти make для автоматизації цього процесу.

 

Завдання: Модифікувати програму, що використовує сигнал SIGCHLD ( із завдання до лабораторної роботи №7), зберігши всі використовувані функції у вигляді окремих *.c файлів. Створити Makefile і продемонструвати використання утиліти make для автоматизації процесу збірки програми.

 

Теоретичні відомості:


Дата добавления: 2018-04-04; просмотров: 459; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!