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

#ps - ruax

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 595 0.0 0.5 2304 660 tty1 R 16:14 0:00 ps -ruax

Следует также отметить, что в случае, когда вся выводимая информация не помещается целиком на экране, следует воспользоваться командой more(см. пример в пункте 2.2)

    1. Получение списка пользователей, работающих в системе

Для того чтобы узнать, кто в данный момент находится в системе и с чем работает – используется команда w.

Для получения списка зарегистрированных в системе пользователей вам надо просто ввести who, и вы увидите на экране список, похожий на приведенный ниже:

# who

root console May 19 07:00

kiv tty02 May 19 08:12

sam tty03 May 19 09:35

cyr ttys7 May 19 12:55

Как видно, в системе зарегистрировано четыре пользователя; в списке приведено также время регистрации каждого из них.

Команда who имеет несколько опций, однако здесь мы расскажем только о двух из них.

  • -u перечисляет пользователей с указанием времени бездействия (точка (.) означает, что пользователь активно работал в последнюю минуту, old – что последний раз он нажимал клавиши более суток назад);

  • -H выводит заголовок.

Таблица 5. Поля вывода команды who

Поле

Описание

USER

Имена пользователей

LINE

Использованные линии и терминалы

LOGIN-TIME

Время входа пользователя в систему

IDLE

Время бездействия пользователя

FROM

Имя удалённой машины или дисплея Х-терминала

    1. Запуск команд в заданное время с помощью команд at и batch

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

    1. Запуск команд в определенное время с помощью команды at

Для запуска одной или более команд в заранее определенное время используется команда at. В ней вы можете определить время и дату запуска той или иной команды. Как минимум, следует указать два параметра – время запуска и какая команда должна быть запущена.

Общий формат команды:

at <время>

  1. Первая команда

последняя команда

<Ctrl+D>

Аргумент <время> состоит из времени дня и даты, если дата не сегодняшняя (в случае, когда дата не будет указана, – она подразумевается сегодняшней). В нашем примере в заданный день и заданное время будут распечатаны все файлы каталога /usr/sal/reportsи пользователюbossбудет направлено уведомление об этом. При использовании командыatнельзя забывать, что по окончании ввода всей команды необходимо нажать сочетание клавиш<Ctrl+D>.

#at 1:23 Jan 24

at>lp /usr/sal/reports/*

at>echo “Files printed, Boss!” | mail –s “Job done” boss

at><EOT>

  1. После ввода всей команды вы увидите на дисплее нечто, наподобие:

          1. warning: commands will be executed using /bin/sh

job 14 at 2002-01-24 1:23

Это означает, что указанные выше команды будут запущены, как и было заказано, в 1:23 24-го января. Здесь приведен также идентификатор задания (14), который понадобиться, например, если вы решите отменить задание. Для этого к вашим услугамatс опцией–d:

#at –d 14

Если список команд находится в файле (например, getdone) и вы хотите запустить все перечисленные в нем команды в10:00, то необходимо ввести:

#at 10:00 < getdone

Задания, определяемые вами, помещаются в очередь, которую операционная система периодически просматривает. Для того, чтобы просмотреть очередь заданий – введите at –L, и все запланированные задания появятся на экране.

И, наконец, несколько примечаний о работе с командой at:

  • команда atработает в фоновом режиме;

  • вы можете увидеть на экране только свои задания команде at.

  1. Управление многозадачностью

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

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

  • запуск процесса с приоритетом, отличающимся от приоритетов других процессов (команда nice);

  • изменение приоритета уже работающего процесса (команда renice);

  • завершение работы процесса (команда kill).

    1. Использование команды nohup

Обычно дочерний процесс прекращается после родительского. Таким образом, если вы запустили фоновый процесс, то он будет прекращен при вашем выходе из системы. Для того чтобы процесс продолжал выполняться даже после вашего выхода из системы, применяется команда nohup. Ее просто следует поместить в начало командной строки. Например:

#nohup sort worknew.dat

Эта простая команда заставляет операционную систему игнорировать ваш выход из нее и продолжать выполнение до тех пор, пока процесс не закончится сам по себе. Таким образом, вы запустите процесс, который может выполняться неделями, не требуя вашего контроля т.е. он окажется без контролирующего терминала (в столбце TTY команды psuax этого процесса будет стоять знак ?). Поэтому, для того чтобы в дальнейшем «засечь» этот процесс, вам будет необходимо использовать опцию x к команде ps. Кроме того, при работе с этой командой следует учитывать, что она не переводит запускаемый процесс автоматически в фоновый режим, а при указании в конце строки знака & – вы можете не получить приветствие после нажатия клавиши <Enter>. В этом случае надо просто пару раз нажать на клавишу <> (которая, как вы знаете из Unix’а, – возвращает в командную строку вводимые ранее вами команды) и приветствие вновь появится, либо – можно просто смело вводить новые команды и они будут работать.

Обычно, вывод запущенной с помощью nohup команды перенаправляется в файл nohup.out, о чем система честно предупреждает вас при запуске команды:

#nohup sort worknew.dat

nohup: appending output to ‘nohup.out’

Итак, отсортированный файл и все возможные в процессе работы сообщения об ошибках после окончания работы окажутся в файле nohup.out. Однако, в следующем примере все сообщения об ошибках будут направлены в файл nohup.out, но отсортированный файл окажется помещенным в worknew.srt.

#nohup sort worknew.dat > worknew.srt &

nohup: appending output to ‘nohup.out’

    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). Причём, реализуйте это обязательно одной командой.

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

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

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

  4. Переключение режимов

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

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

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

  3. Определите текущую дату и время с помощью команды date.

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

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

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

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

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

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

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

Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 6