Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_ЛР 902_Часть2.doc
Скачиваний:
38
Добавлен:
15.04.2015
Размер:
274.94 Кб
Скачать
        1. Операторы перенаправления ввода-вывода Linux перечислены в таблице 1.

        1. Таблица 1. Операторы перенаправления ввода-вывода в Linux

                  1. Оператор

                  1. Значение

                  1. Пример

                  1. <

                  1. Принять ввод из файла

                  1. mail sasha < report

                  1. >

                  1. Направить вывод в файл

                  1. date > now

                  1. >>

                  1. Добавить вывод в конец файла

                  1. date >> report

    1. Связывание процессов с помощью каналов (конвейеров)

Часто возникает необходимость использовать вывод одной программы в качестве ввода другой. Вместо того, чтобы вводить каждую команду по отдельности и сохранять результаты в промежуточных файлах, свяжите последовательные команды с помощью канала ( | ). Название канал (конвейер) весьма точно отражает суть происходящего. Информация, выдаваемая программой слева от канала (вертикальной черты), передается через канал и поступает на вход программы справа. С помощью каналов можно связывать несколько процессов при этом следует учесть, что все программы запускаются одновременно. Если же для разделения команд между собой в одной строке вы используете как точку с запятой, так и символ конвейера, то перед каждой точкой с запятойshellбудет останавливаться и ожидать, пока не выполнятся все предыдущие команды – как отдельные, так и объединённые в конвейер.

В качестве примера, рассмотрим часто используемый на практике приём постраничного вывода большого объёма текстовой информации на экран монитора:

#ps -uax | more

Вторая команда more – это программа, при помощи которой длинные файлы показываются постранично, а не целиком (формат командыmore [-флаги] [файл1..]). Чтобы показать следующую страницу, следует нажать клавишу пробела, а для выхода –q.

При использовании конвейеров, бывает чрезвычайно полезна команда tee [-a] [файл], которая копирует стандартный ввод на стандартный вывод или, дополнительно, – в указанный файл. Если он уже существует, то его содержимое замещается, а при указании опцииa происходит дописывание в конец файла. Фактически, она позволяет снимать промежуточные результаты при «длинных» конвейерах и выводить их либо на терминал, либо в указанный файл (файлы).

Воспользовавшись только лишь рассмотренными командами можно уже, запрограммировать достаточно сложную последовательность действий, которую на практике, иногда, приходится многократно повторять. Так, например, следующие две команды формируют файл, состоящий из отсортированного файла sales.dat, трёх чисел задающих соответственно – число строк, слов и байтов отсортированного файла sales.dat, и в последней строке указана дата создания этого файла:

#sort sales.dat | tee sales.srt | wc >> sales.srt

date >> sales.srt

Используемая здесь команда wcимеет своим входом текстовую информацию, а выходом – три описанных выше числа.

  1. Многозадачность

Linux– система многопользовательская и многозадачная. Поддержка многих пользователей означает, что одновременно работать с системой могут несколько человек (в отличие от однопользовательской операционной системы наподобиеMS-DOS). Многозадачность означает, чтоLinuxможет выполнять несколько задач одновременно.

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

Только за время нажатия вами клавиши <Enter>система способна обработать сотни запросов. Создается впечатление одновременного выполнения множества задач, хотя на самом делеLinuxуправляет списком задач (известным также как очередь задач) и выделяет каждой задаче ее часть времени. С точки зрения человека, это время крайне незначительно, однако для компьютера это достаточно длительный период, в течение которого выполняются тысячи команд процессора. Количество выделяемого каждой задаче времени зависит от ее относительного приоритета.

Linux работает с одной задачей (процессом) определенное время, затем откладывает ее и приступает к другой задаче – и так все время работы операционной системы. Так же, она отвечает за корректную работу нескольких пользователей и нескольких процессов, скрывая детали этой работы от пользователя. В качестве пользователя вы можете определять, какие программы и когда должны быть запущены, а также следить за их выполнением. В некоторых случаях, вы можете изменять их относительный приоритет, а также прекратить выполнение своего процесса. Будучи системным администратором, вы выполняете то же самое не только со своими, но и с системными процессами и процессами любого пользователя.

Существует ряд команд, позволяющих работать с многопользовательскими и многозадачными возможностями Linux. Некоторые из них мы рассмотрим в данной лабораторной работе (см. таблицу 2)

Таблица 2. Команды для работы с процессами

Команда

Назначение

at

  1. Выполняет команду в определенное время

batch

Выполняет команду тогда, когда позволяет загрузка системы

nohup

Позволяет работать процессу после вашего выхода из системы

ps

Выводит информацию о процессах

w

Показывает, кто в настоящий момент работает в системе и с чем

who

Выводит список пользователей

&

Запускает задачу в фоновом режиме

bg

Переводит приостановленную задачу в фоновый режим

fg

Переводит приостановленную задачу в приоритетный режим

nice

Изменяет приоритет процесса при его запуске

renice

Изменяет приоритет работающего процесса

jobs

Отображает на экране исполняемые процессы

kill

Прекращает выполнение процесса

    1. Приоритетный и фоновый режимы

Программу можно запустить как фоновый процесс (указать в строке после запускаемой команды символ &) или перевести задачу переднего плана(foreground)в фоновый режим (с помощью командыbg). При работе программы в качестве фонового процесса вы можете продолжать вводить команды и работать с другими процессами.

Для примера рассмотрим команду yes:

# yes

(команда запушена в «приоритетном режиме»)

Результатом работы этой команды будет длинный столбец символов yв левом краю экрана, бегущий быстрее, чем вы можете следить за этим.

Можно приостановить выполнение команды комбинацией клавиш Ctrl+Z.Процесс приостановил свое выполнение, но не прекратился. При этом на экране появится сообщение:

[1]+ Stopped yes

Давайте разберем его по частям:

[1] - это номер задачи, он используется когда нам надо сослаться конкретно на эту задачу. Если вы запускаете некоторый процесс в фоновом режиме, тоshellвыводитPIDзапущенного процесса и номер задачи (при выполнении л/р их желательно запоминать).

«+» - говорит о том, что этот процесс является текущим процессом или процессом по умолчанию. Если запущено несколько процессов, то кроме того, у одного из них будет стоять знак «-». Он обозначает предыдущую задачу которая может стать текущей после завершения нынешней текущей.

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

yes- имя команды, которое было введено в командной строке при запуске программы.

Теперь, пока процесс находится в режиме ожидания, мы можем продолжить его выполнение либо в фоновом режиме, либо в приоритетном режиме, либо вообще уничтожить этот процесс. Рассмотрим каждый конкретный случай:

  • bg [%номер задачи] чтобы перевести процесс в фоновый режим;

  • fg [%номер задачи] – чтобы перевести процесс в приоритетный режим;

  • kill [%номер задачи] – чтобы убить процесс.

Во всех рассмотренных командах [%номер задачи] – необязательный параметр, и он необходим, когда вы работаете с не текущим процессом. Кроме того, уничтожить процесс можно также, если запустить этот процесс в приоритетном режиме (с помощью команды fg), а затем – нажатием комбинации клавишCtrl+C– уничтожить его.

Пример 1

Запустим команду yes:

#yes