Файл: Министерство образования и науки российской федерации университет итмо д. А. Зубок, А. В. Маятин.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 314
Скачиваний: 1
СОДЕРЖАНИЕ
Виртуальная среда для выполнения лабораторных работ
Лабораторная работа №1. Основы использования консольного интерфейса ОС GNU/Linux.
Задание на лабораторную работу
Лабораторная работа №2. Обработка текстовых потоков в ОС GNU/Linux
Управление вводом-выводом команд (процессов)
Работа со строками (внутренние команды bash)
Работа со строками (внешние команды)
Задание на лабораторную работу
Лабораторная работа №3. Мониторинг процессов в ОС
Получение общих сведений о запущенных процессах
Получение детальных сведений о запущенных процессах
Получение данных об оперативной памяти
Задание на лабораторную работу
ProcessID=PID : Parent_ProcessID=PPID : Average_Time=avg_atom.
Лабораторная работа №4. Управление процессами в ОС
Директивы (команды) объединения команд
Команды для управления процессами
минута час день_месяца месяц день_недели команда
Организация взаимодействия двух процессов
Задание на лабораторную работу
Лабораторная работа №5. Работа с файлово-каталожной системой в ОС GNU/Linux
Основные команды для работы с файлами и каталогами
Задание на лабораторную работу
Лабораторная работа №6. Консольный интерфейс ОС
Основные команды, необходимые для выполнения лабораторной работы:
if [not] errorlevel число команда [else команда]
if [not] строка1==строка2 команда [else команда]
if [not] exist имя_файла команда [else команда]
for {%переменная | %%переменная} in (множество) do
минута час день_месяца месяц день_недели команда
Допустимые значения:
минута | от | 0 | до | 59 | |
час | от | 0 | до | 23 | |
день_месяца | от | 1 | до | 31 | |
месяц | от | 1 | до | 12 | (или три буквы от jan до dec, независимо от регистра) |
день_недели | от | 0 | до | 6 | (0 это воскресенье или три буквы от sun до sat) |
Если в соответствующее поле поместить символ * это будет соответствовать любому возможному значению. Для полей можно указывать диапазоны значений, разделенных дефисом, например:
0 11 6-9 1-3 * echo "Hello World!" – вывод "Hello World!" в 11:00
в 6,7,8,9 дни января, февраля и марта.
0 */2 * * mon echo "Hello World!" – вывод "Hello World!" каждый четный час каждого понедельника
tail – не только выводит последние n строк из файла, но и позволяет организовать "слежение" за файлом – обнаруживать и выводить новые строки, появляющиеся в конце файла.
sleep – задает паузу в выполнении скрипта.
Организация взаимодействия двух процессов
Существует несколько вариантов организации взаимодействия процессов. Поскольку суть взаимодействия состоит в передаче данных и/или управления от одного процесса к другому, рассмотрим два распространенных варианта
организации такого взаимодействия: передачу данных через файл и передачу управления через сигнал.
Взаимодействие процессов через файл
Для демонстрации передачи информации через файл рассмотрим два скрипта – «Генератор» и «Обработчик». Требуется считывать информацию с консоли с помощью процесса «Генератор» и выводить ее на экран с помощью процесса «Обработчик», причем таким образом, чтобы считывание генератором строки «QUIT» приводило к завершению работы обработчика. Каждый скрипт запускается в своей виртуальной консоли. Переключаясь между консолями, можно управлять скриптами и наблюдать результаты их работы.
Генератор | Обработчик |
#!/bin/bash while true; do read LINE echo $LINE >> data.txt done | #!/bin/bash (tail -n 0 -f data.txt) | while true; do read LINE; case $LINE in QUIT) echo "exit" killall tail exit ;; *) echo $LINE ;; esac done |
Скрипт «Генератор» в бесконечном цикле считывает строки с консоли и дописывает их в конец файла data.txt.
Скрипт «Обработчик» рассмотрим подробнее.
Команда tail позволяет считывать последние n строк из файла. Но один из наиболее распространенных вариантов ее использования – организация
«слежения» за файлом. При использовании конструкции
tail -f считывание из файла будет происходить только в случае добавления информации в этот
файл. При этом ключ -n 0 предотвращает чтение из файла, пока его содержимое не обновилось после запуска команды tail. Поскольку необходимо передавать выход команды tail на вход скрипта «Обработчик», используем конструкцию (команды)| Круглые скобки позволяют запустить независимый подпроцесс (дочерний процесс) внутри родительского процесса
«Обработчик», а оператор конвейера в конце позволит направить выход этого подпроцесса на вход родительского процесса. Таким образом, команда read в этом скрипте читает выход команды tail. Остальная часть скрипта основывается на конструкциях, изученных в предыдущих лабораторных работах, и не требует детального рассмотрения. Исключение составляет только команда killall tail. С ее помощью завершается вызванный в подпроцессе процесс tail перед завершением родительского процесса. Использование killall в этом случае используется для упрощения кода, но не всегда является корректным. Лучше определять PID конкретного процесса tail, вызванного в скрипте, и завершать его с помощью команды kill.
Взаимодействие процессов с помощью сигналов
Сигналы являются основной формой передачи управления от одного процесса к другому. Существуют «стандартные» (системные) сигналы, имеющие фиксированные имена и названия (например, SIGTERM, SIGKILL и т.д.), но существует возможность передавать процессу и вновь создаваемый, пользовательский сигнал.
Таблица 1. Часто используемые сигналы
№ | Имя | Описание | Можно перехватывать | Можно блокировать | Комбинация клавиш |
1 | HUP | Hangup. Отбой. Получение этого сигнала как правило означает, что завершил работу терминал из которого был запущен процесс и следовательно процесс тоже должен быть завершен. | Да | Да | |
2 | INT | Interrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах - прекращение активного процесса | Да | Да | или |
3 | QUIT | Как правило, сильнее сигнала Interrupt | Да | Да | |
4 | ILL | Illegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблема | Да | Да | |
8 | FPE | Floating Point Exception. Вычислительная ошибка, например, деление на ноль | Да | Да | |
9 | KILL | Всегда прекращает выполнение процесса | Нет | Нет | |
11 | SEGV | Segmentation Violation. Доступ к недозволенной области памяти | Да | Да | |
13 | PIPE | Была предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данные | Да | Да | |
15 | TERM | Software Termination. Требование закончить процесс (программное завершение) | Да | Да | |
17 | CHLD | Изменение статуса порожденного процесса | Да | Да | |
18 | CONT | Продолжение выполнения приостановленного процесса | Да | Да | |
19 | STOP | Приостановка выполнения процесса | Нет | Нет | |
20 | TSTR | Сигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый режим | Да | Да | |
В случае системных сигналов, как правило, процесс имеет обработчик этого сигнала – код, который выполнится в случае получения процессом этого сигнала. Для использования пользовательских сигналов необходимо написать свой обработчик.
Для обработки сигналов в sh (bash) используется встроенная команда
trap с форматом