Практика бд. Операционные. Министерство образования и науки российской федерации университет итмо д. А. Зубок, А. В. Маятин
Скачать 324.61 Kb.
|
минута час день_месяца месяц день_недели командаДопустимые значения:
Если в соответствующее поле поместить символ * это будет соответствовать любому возможному значению. Для полей можно указывать диапазоны значений, разделенных дефисом, например: 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» приводило к завершению работы обработчика. Каждый скрипт запускается в своей виртуальной консоли. Переключаясь между консолями, можно управлять скриптами и наблюдать результаты их работы.
Скрипт «Генератор» в бесконечном цикле считывает строки с консоли и дописывает их в конец файла data.txt. Скрипт «Обработчик» рассмотрим подробнее. Команда tail позволяет считывать последние n строк из файла. Но один из наиболее распространенных вариантов ее использования – организация «слежения» за файлом. При использовании конструкции tail -f считывание из файла будет происходить только в случае добавления информации в этот файл. При этом ключ -n 0 предотвращает чтение из файла, пока его содержимое не обновилось после запуска команды tail. Поскольку необходимо передавать выход команды tail на вход скрипта «Обработчик», используем конструкцию (команды)| Круглые скобки позволяют запустить независимый подпроцесс (дочерний процесс) внутри родительского процесса «Обработчик», а оператор конвейера в конце позволит направить выход этого подпроцесса на вход родительского процесса. Таким образом, команда read в этом скрипте читает выход команды tail. Остальная часть скрипта основывается на конструкциях, изученных в предыдущих лабораторных работах, и не требует детального рассмотрения. Исключение составляет только команда killall tail. С ее помощью завершается вызванный в подпроцессе процесс tail перед завершением родительского процесса. Использование killall в этом случае используется для упрощения кода, но не всегда является корректным. Лучше определять PID конкретного процесса tail, вызванного в скрипте, и завершать его с помощью команды kill. Взаимодействие процессов с помощью сигналовСигналы являются основной формой передачи управления от одного процесса к другому. Существуют «стандартные» (системные) сигналы, имеющие фиксированные имена и названия (например, SIGTERM, SIGKILL и т.д.), но существует возможность передавать процессу и вновь создаваемый, пользовательский сигнал. Таблица 1. Часто используемые сигналы
В случае системных сигналов, как правило, процесс имеет обработчик этого сигнала – код, который выполнится в случае получения процессом этого сигнала. Для использования пользовательских сигналов необходимо написать свой обработчик. Для обработки сигналов в sh (bash) используется встроенная команда trap с форматом |