Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы по UNIX / UNIX6

.doc
Скачиваний:
43
Добавлен:
10.05.2014
Размер:
53.25 Кб
Скачать

3

6 =====================================================

ЛАБОРАТОРНАЯ РАБОТА № 6 (время выполнения -- 2 часа)

Тема: ”Управление процессами”

Процессы в UNIX играют ключевую роль. ОС представляет собой многозадачную среду, в которой одновременно выполняется несколько программ. Каждая программа может стартовать и завершать множество процессов в течение своего исполнения. От оптимального планирования процессов и числа одновременно выполняющихся процессов зависит загрузка процессора, что в итоге влияет на производительность системы в целом.

1. Наблюдение за процессами

ps

информация об активных процессах

pgrep

поиск процессов по заданному шаблону, выводит список PID и к.с., запустившей процесс (исполняемого файла)

prstat

информация о системных процессах

2. Управление процессами

2.1. Задание переменных среды

export

Экспортирование переменной среды

env

Просмотр переменных среды

2.2. Запуск процессов в фоновом режиме

&

Запуск процесса в фоновом режиме

nohup

Незавершение процесса после завершения сеанса пользователя

2.3. Планирование процесса (назначение приоритета)

Приоритет процесса -- целочисленное значение, которое динамически вычисляется и обновляется на основе некоторых различных факторов. Чем меньше уровень приоритетности, тем процесс предпочтительнее. Приоритеты с одинаковым уровнем приоритетности помещаются в очередь выполнения для данного значения приоритета. При освобождении ЦП планировщик выбирает процессы из начала непустой очереди с меньшим значением уровня приоритета.

Процесс в UNIX имеет 2 ассоциированных с ним значения приоритета -- запрошенный приоритет относительно других процессов (NI) и приоритет, присваиваемый процессу ОС (PRI). Процессу по умолчанию присваивается NI, равный NI его родительского процесса. Доступные значения приоритетов -- от -20(самый высокий) до +20 (самый низкий). Процессы пользователя -- от 0 до +20.

nice

Запуск процесса с заданным приоритетом

renice

Изменение приоритета процесса

priocntl

Изменение приоритета процесса

Примеры

Повышение приоритета процесса

nice -5 my_command

Изменение приоритета процесса

renice -n 5 -p 8200

priocntl -s -p -5 -i pid 8200 для процесса 8200

priocntl -s -p -5 -i pid 8200 для всех потомков 8200

2.4. Сигналы

Сигналы являются простейшей формой межпроцессного взаимодействия. Сигнал может быть отправлен процессу либо ядром, либо другим процессом с помощью системного вызова kill(). Символьные имена сигналов и их расшифровка - в файле <signal.h>. Для отправки сигналов используются команды kill, pkill.

Пример

pkill -9 my_prog

Если сигнал не задан, то по умолчанию SIGTERM.

Пример

my_program &

kill $! (переменная $! содержит PID последнего

запущенного процесса,

по умолчанию посылается SIGTERM)

Реакция на сигналы

При получении сигнала процесс может действовать 3 способами

- проигнорировать сигнал (trap “ “ сигнал)

- выполнить (восстановить) действия по умолчанию (trap сигнал)

- перехватить (”перехитрить”) сигнал (trap команда сигнал)

Сигналы SIGKILL и SIGSTOP нельзя ни перехватить, ни проигнорировать.

2.5. Планирование работ

ОС Solaris поддерживает 2 способа пакетной обработки данных -- crontab и at.

Демон cron планирует системные события в соответствии с командами, заданными в файле crontab.

Формат файла crontab

минута час день_месяца месяц день_недели команда

Пример

0 12 5,20 * * echo "Получите зарплату" > /dev/console

Планирование одиночного системного события (команда at)

Пример

at 07:45am today who>/tmp/log

УПРАЖНЕНИЯ

  1. Запустите терминал. Определите PID процесса, который ассоциируется с запущенным терминалом.

  2. Запустите другой терминал. Остановите первый запущенный терминал, послав ему сигнал STOP.

  3. Убедитесь, что первый терминал действительно остановлен.

  4. Сделайте так, чтобы остановленный терминал продолжил свою работу (пошлите ему сигнал CONT)

  5. Напишите shell-программу, выполняющую бесконечный цикл, одну итерацию в секунду. Запустите ее в фоновом режиме. Остановите программу.

  6. Напишите программу, которая выдает в бесконечном цикле сообщение, заданное как аргумент. Как остановить такую программу?

  7. Запустите программу из предыдущей задачи с пониженным приоритетом. Как повысить ее приоритет? Как запустить несколько таких программ одной командной строкой? Как переключаться между ними? Остановите запущенные Вами программы.

  8. Запустите вновь программу из задачи 5 в фоновом режиме и завершите сеанс. Вновь зарегистрируйтесь. Работает ли Ваша программа? Сделайте так, чтобы запущенная Вами в фоновом режиме программа продолжала работать после Вашего выхода из системы.

  9. Напишите программу, которая сообщает имя переданного ей сигнала и записывает его в файл с указанием времени события.

  10. Напишите программу manager, которая запускает две другие написанные Вами программы с разными приоритетами. Эти программы должны периодически добавлять в файлы некоторую информацию разного объема. При превышении заданного объема одним из файлов manager прекращает выполнение обеих программ и выводит имя той из них, которая создала больший файл.

  11. Напишите программу-диспетчер, которая запускала бы две другие shell-программы, каждая из которых выводила бы в цикле сообщение о своей работе. Цель программы–диспетчера – обеспечить псевдопараллельную работу этих программ, поочередно выделяя квант времени для каждой, но так, чтобы в каждый момент времени работала бы только одна программа.

  12. Установите в качестве первичного приглашения идущие часы, меняющие свои показания каждые 10 секунд.

  13. Напишите программу-будильник, которая работает в фоновом режиме и в указанное время напоминает пользователю о важном деле.

  14. Напишите программу, которая, работая в фоновом режиме, в указанное время отключает пользователя от системы.

  15. Напишите shell-программу, которая в фоновом режиме запускает другую shell-программу, указанную ей в качестве аргумента, и печатает сообщение:

«имя запущенной программы» already started

и ждет завершения программы, после чего сообщает:

«имя запущенной программы» finished

Соседние файлы в папке Лабы по UNIX