Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб ОС_5-8.doc
Скачиваний:
8
Добавлен:
04.11.2018
Размер:
559.62 Кб
Скачать
    1. Изменение приоритета команд с помощью nice

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

Синтаксис использования nice следующий:

nice -смещение command

Уровень приоритета определяется параметром смещение, при этом большее его значение означает меньший приоритет команды. Значение по умолчанию – 10, и смещение представляет собой число, на которое он должен быть уменьшен. Например, если вы запускаете процесс сортировки:

#sort worknew.dat > worknew.srt &

и хотите дать ему преимущество над другим процессом, например, печати, запустите этот второй процесс с уменьшенным приоритетом:

#nice -5 lp mail_list &

Либо, если вы имеете права администратора (в л/р вы их не имеете), то вы можете просто повысить приоритет процесса сортировки, задав ему отрицательное смещение:

#nice -5 sort worknew.dat > worknew.srt &

Самый низкий приоритет будет иметь задача, у которой смещение равно 19, а самый высокий – -20.

    1. Изменение приоритета работающего процесса с помощью renice

Команда renice позволяет изменить приоритет работающего процесса. Формат этой команды следующий:

renice number PID

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

Пример

Запустим процесс печати на принтере файла sales.dat с пониженным на 2 приоритетом, а затем понизим его ещё на 3:

#nice -2 lp sales.dat &

[1] 5920

Посмотрим, что выдаст нам команда jobs:

#jobs

[1] + Running nice -2 lp sales.dat &

#renice 5 5920

5920: old priority 2, new priority 5

#jobs

[1] + Running nice -2 lp sales.dat &

При этом видно, что сообщение команды jobs не изменилось, т.к. надпись справа – это всего лишь команда, которая была набрана при запуске процесса, а не информация о текущем приоритете его работы.

В заключении, отметим следующие правила использования команд nice и renice:

  • вы можете использовать renice только со своими процессами;

  • суперпользователь может применить renice к любому процессу, пользователю или целой группе;

  • только суперпользователь может повысить приоритет процесса.

    1. Прекращение процесса с помощью kill

Иногда, необходимо прекратить выполнение процесса, не дожидаясь его нормального завершения. Это может произойти в следующих случаях:

  • процесс работает слишком долго, не давая желаемых результатов;

  • из-за ошибки оператора или программы используются не те файлы или параметры командной строки;

  • дальнейшее выполнение процесса бесполезно;

  • и другое….

Если процесс работает не в фоновом режиме, нажатие <Ctrl+C> должно прервать его выполнение, но если процесс фоновый, то это не поможет. В этом случае, прервать его выполнение можно с помощью kill.

Для завершения процесса с идентификатором 941 просто введите kill 941. Для того чтобы завершить процессы 941, 149, 491, надо ввести kill 941 149 491 либо, как это уже описывалось ранее – ввести: [kill] [%номер задачи], но не всегда есть возможность получить параметр номер задачи. Так, например, в случае с командой nohup – после повторного входа в систему. В этом случае следует воспользоваться командой ps, причём в виде psuax | more.

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

Завершение родительского процесса обычно приводит к завершению дочерних, однако, для полной уверенности в завершении всех процессов, связанных с данным, указывайте их в команде kill.

Контрольные вопросы

  1. Что называется процессом, идентификатором процесса; какой процесс запускается непосредственно ядром Linux, чем он характеризуется?

  2. Какие команды для перенаправления ввода и вывода вы знаете?

  3. Расскажите об использовании канала (|). В чем состоит удобство его использования?

  4. В чем заключается многопользовательность и многозадачность системы Linux?

  5. Расскажите, какие бывают режимы выполнения процессов, и поясните на примере, как запустить задачу в том или ином режиме.

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

  7. Какая основная команда используется для получения информации о процессах? Какие опции надо указать, чтобы узнать о запущенном процессе sort следующую информацию:

  • какой пользователь запустил данный процесс;

  • сколько на него тратится оперативной памяти;

  • каков статус этого процесса.

  1. Расскажите о функциях команды who и её опциях.

  2. Формат команды at, для чего она используется.

  3. В чем принципиальное различие команд at и batch?

  4. Перечислите средства управления многозадачностью. Подробно расскажите о любом из них.

  5. Какой наименьший приоритет может иметь запущенная вами задача?

  6. Формат команды kill. Какими способами можно завершить процесс? В каких случаях подходит каждый из них?

Практическая часть

  1. Войдите в систему Linux под именем, задающимся преподавателем.

  2. Войдите в оболочку Midnight Commander (команда: #mc).

  3. Создайте свой каталог с именем, совпадающим с номером вашей бригады (клавиша F7) в каталоге, определённым преподавателем.

  4. Создайте файлы 1 3.txt с помощью комбинации клавиш Shift+F4:

файл 1.txt: файл 2.txt: файл 3.txt:

2 i New OS – – run now.

5 x

1 L

3 n

4 u

  1. Создайте файл infinity содержащий сценарий бесконечного цикла:

# !/bin/sh

x=$((0));

z=$((0));

while /bin/true

do

x=$(($x+$z));

done

Установите права доступа к файлу infinity как к выполняемому, введя команду: #chmod 0100 infinity

  1. Связывание процессов. Отсортируйте файл 1.txt (команда sort) и модифицируйте вывод результата на экран заменой букв L и x на M и s соответственно (команда замены: tr Lx Ms). Причём, реализуйте это обязательно одной командой.

  2. Добавьте отсортированный текст файла 1.txt в конец 2.txt. Убедитесь в достижении результата.

  3. Запустите бесконечный процесс (команда: #sh infinity) в приоритетном режиме, и во время его выполнения уничтожьте его.

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

  5. Переключение режимов. Запустите бесконечный процесс infinity в приоритетном режиме. Во время его выполнения приостановите процесс и запустите снова в фоновом режиме. Попытайтесь сделать то же самое в обратном порядке, а затем уничтожьте работающий процесс.

  6. Получите информацию о состоянии процессов с разной степенью полноты с помощью известной вам команды.

  7. Получите подробную информацию о пользователях, работающих и просто зарегистрированных в системе.

  8. Узнайте текущую дату и время с помощью команды date.

  9. Организуйте при помощи команды at через 15 минут запись в файл 4.txt файлов 2.txt и 3.txt в соответствующем порядке и продолжите выполнение остальных пунктов задания.

  10. Убедитесь, что файл 1.txt – не отсортирован. Запустите процесс сортировки файла 1.txt через 5 минут а затем, отмените выполнение задания. Проверьте, остался ли файл 1.txt по-прежнему не отсортированным.

  11. Создайте файл с именем start. Его содержимым должны быть команды выполняющие задачу, описанную в пункте 14. Затем запустите этот файл через 5 минут с помощью команды at.

  12. Просмотрите очередь запущенных заданий с помощью команды at –l. Воспользовавшись командой ps с необходимыми опциями, попытайтесь определить идентификаторы процессов, запущенных в пунктах 14 и 16. Убедитесь, что в заданное время закончится процесс запуска файла start. Сотрите результаты, полученные в файле 4.txt. Подождите окончания выполнения задания, запущенного в п.14. Ещё раз проверьте результат выполнения в файле 4.txt.

  13. Запустите бесконечный процесс с помощью команды nohup. Проверьте, что процесс запущен и выйдите из системы (команда #exit). Затем войдите в систему снова и убедитесь, что команда выполняется (используя команду: #ps -uax | more). Теперь, аналогичные действия произведите с процессом сортировки файла 1.txt. Причём, вывод результата необходимо направить в файл 5.txt. Убедитесь, что команда выполняется.

  14. Запустите бесконечный процесс с приоритетом, уменьшенным на 5, в фоновом режиме, а затем понизьте приоритет этой задачи до 9. Теперь, запустите ещё один бесконечный процесс без изменения приоритета в фоновом режиме и посмотрите, как распределяются ресурсы системы между ними.

  15. Уничтожьте все запущенные вами в предыдущих пунктах процессы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]