Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
20.04.2015
Размер:
2 Mб
Скачать

Vim topfile

и наберите три строки произвольного текста. Сохраните файл. На другом виртуальном терминале исполните

top –b –n1 | grep vim

Определите характеристики процесса vim., а затем завершите работу всех сеансов пользователей, кроме одного.

В пособии уже много раз упоминалась команда ps. Система помощи man содержит много информации об этой команде с богатыми возможностями. До настоящего времени утилите давались разные опции, позволяющие ограничить (или расширить) список выводимых процессов (строк вывода). Для каждой из них выводился свой стандартный набор атрибутов (столбцов вывода). Но эта утилита обладает и другими возможностями. Можно сформировать по своему желанию список атрибутов процессов, которые будут выводиться. Приведем параметры вызова утилиты, позволяющие задавать список атрибутов:

cmd – полное имя исполнимого файла;

fname – имя исполнимого файла;

pid – идентификатор;

stat – состояние;

pri – приоритет;

ni – число nice.

Полный их список содержит man по утилите ps. Приведем пример, в котором выводится список из пяти значений атрибутов.

ps -е -o pid,stat,ni,pri,fname --sort ni

Вывод будет содержать следующие столбцы PID STAT NI PRI COMMAND, отсортированные по числу nice (опция --sort ni ).

Если дать такую команду

ps а -о pid,stat,ni,pri,fname --sort pid

то будет выведено следующее (приведено только несколько строк).

PID STAT NI PRI COMMAND

2723 Ss+ 0 19 mingetty

2724 Ss+ 0 19 mingetty

2726 Ss+ 0 19 mingetty

2727 Ss+ 0 19 mingetty

2728 Ss+ 0 19 mingetty

2788 Rs+ 0 19 Xorg

3985 Ss 0 19 bash

4016 S+ 0 19 mc

4022 Ss+ 0 19 bash

6379 Ss 0 19 bash

6443 S+ 0 19 mc

6445 Ss 0 19 bash

6973 R+ 0 19 ps

Задание 34.

Зарегистрируйте сеанс asplinux. Выполните команду

ps e -o pid,stat,ni,pri,fname --sort ni

Сделайте вывод о диапазоне изменения значений числа nice. Проверьте свой вывод в справочном руководстве man по команде nice.

4.4. Рассмотрим работу в фоновом режиме

В Linux развиты средства одновременной работы многих приложений, даже на одном персональном компьютере. Поэтому такие операционные системы, следуя своим предшественникам UNIX, позволяют пользователю выполнять одновременно несколько программ. Только одна из запущенных на выбранном виртуальном терминале работает в диалоговом режиме. Остальные «не мешают» диалогу. Про такие программы говорят, что они работают в фоновом режиме, в противоположность программам, выполняемым на переднем плане. Если в системе есть процессы, запущенные в фоновом режиме, то для них используют термин работа. Для того, чтобы вывести все программы, запущенные в фоновом режиме, используют команду jobs.

В появлении фонового режима выполнения возможно «повинны» те программы, которые работают долгое время, но не имеют при этом внешних проявлений. К ним можно отнести, например, сжатие больших файлов. Пока выполняется такая работа, можно в диалоге заниматься другой, например, набирать текст.

Работы, выполняемые в фоновом режиме, могут быть приостановлены. Однако это не означает их завершения. Они продолжают выполнение с того состояния, при котором были остановлены. Временно приостановить такую программу можно комбинацией <Сtrl+S>, а запустить вновь – <Сtrl+Q>.

Для изучения фонового исполнения программ, перейдите на первый виртуальный терминал и откройте сеанс пользователя root. Изучим процедуру управления работами. Будем исполнять действия, совпадающие с теми, что были описаны в материале по операционной системе Linux по адресу http://eugene.mplik.ru.

В системах UNIX есть команда, которая посылает в выходной поток один символ y. Это происходит бесконечно (в режиме «зацикленной» программы). Запускается программа командой

yes

На первом виртуальном терминал дадим эту команду. Зарегистрируем на втором виртуальном терминале сеанс root, далее дадим такую же команду

yes

Так как первый и второй виртуальные терминалы не доступны, на свободном (например, третьем) виртуальном терминале в сеансе asplinux выполним сначала

ps # on tty3

а затем

psa # on tty3

Первая из них даст такой результат

PID TTY TIME CMD

3932 tty3 00:00:00 bash

3973 tty3 00:00:00 ps

вторая же несколько отличный

PID TTY STAT TIME COMMAND

3891 tty1 R+ 0:20 yes

3929 tty2 R+ 0:17 yes

3976 tty3 R+ 0:00 ps a

Теперь перейдем на четвертый виртуальный терминал и откроем сеанс пользователя root и выполним

psr # on tty4

она даст следующий вывод

PID TTY STAT TIME COMMAND

3891 tty1 R+ 1:13 yes

3929 tty2 R+ 1:06 yes

4090 tty4 R+ 0:00 ps r

Задание 35.

В сеансе пользователя asplinux выполните на четвертом виртуальном терминале команды из пункта 4.4 выполненные ранее и сравните их с результатом таких же команд в сеансе пользователя root.

Завершим все выполняемые программы и оставим активным только сеанс на первом виртуальном терминале.

Следующим действием перенаправим ввод команды yes в специальный файл /dev/null (черная дыра)

yes > /dev/null

Теперь на экране не будет выводиться сплошной поток символов y. Но клавиатура все же занята. Если набирать на ней символы, они отображаются на экране. Но новую команду выполнить не удается. Пререм выполнение программы <Ctrl+С> и запустим ее уже в фоновом режиме, добавив символ &

yes > /dev/null &

В ответ на экране будет выведено, например следующее

[1] 3211

Цифра в квадратных скобках означает номер работы, а число за ней – идентификатор процесса, связанного с ней. После выполнения программы, на экране вновь появилась строка приглашения. Теперь можно исполнять другие программы. Они могут работать, как в фоновом, так и в режиме переднего плана. Запустим еще один экземпляр программы

yes > /dev/null &

со следующим результатом

[2] 3112

Подтверждение выполнения программы yes в двух экземплярах получим по команде

jobs

со следующим результатом

[1]- Running yes > /dev/null &

[2]+ Running yes > /dev/null &

или

ps -r

после выполнения которой будет выведено

PID TTY STAT TIME COMMAND

3211 tty1 R+ 0:13 yes

3112 tty1 R+ 1:06 yes

3687 tty1 R+ 0:00 ps r

Прекратить выполнения таких команд можно по-разному. Например, первую - следующей командой

kill %1

а вторую - так

kill 3929

[1]- Завершено yes > /dev/null &

Из этого следует, что к работам можно «обратиться», используя форму %n, где n –номер работы, или по числовому идентификатору процесса. Запустим два новых экземпляра команды yes (напомним, что это легко сделать, возвратив команду нажимая ).

Если программа запущена в режиме переднего плана, то ее можно перевести в «фон» следующим образом. Сначала остановим ее командой <Ctrl+Z>, а затем надо использовать специальную команду bg (от back ground). Выполним это.

Сначала запустим команду

yes> /dev/null &

Далее остановим ее (<Ctrl+Z>)

[3]3686

[2]- Завершено yes > /dev/null &

и дадим команду bg. Она приведет к такому результату

[3]+ yes > /dev/null &

Отметим, что запуск программы в режиме переднего плана возможен и по команде fg. Ею можно перевести выполнение программы из фонового режима в обычный. Для этого используется запись следующего вида

fg %n

где n – номер работы.

Проделаем следующее. Выполним в фоновом режиме команду

find / -name a* > /dev/null &

и еще одну

yes> /dev/null &

Выполнив jobs, увидим приблизительно следующее

[1]- Running yes > find / -name a* > /dev/null &

[2]+ Running yes > /dev/null &

Любую из работ можно перевести в передний план командой fg с указанием номера. Если выполнить такую команду

fg %2

на экране будет следующее сообщение

yes > /dev/null

Но строки приглашения при этом не возникает. Прекратите выполнение yes.

Отметим, что команды jobs, fg и bg являются внутренними командами оболочки и им не соответствуют исполнимые файлы.

Такая команда.

find / -name fg

не найдет исполнимого файла.

Задание 36.

Выполните такую последовательность действий.

1. Дайте команду yes.

2. Остановите ее (<Ctrl+Z>).

3. Выполните bg. Убедитесь, что снять работу комбинацией <Ctrl+C> не удется.

4. На другом виртуальном терминале снимите процесс, запущенный в п.1.

5. Дважды запустите в фоновом режиме программу такой командой

yes> /dev/null &.

6. Выполните fg, а далее остановите процесс (<Ctrl+Z>,) выполнив jobs и определите какой из двух запущенных в п. 5 процессов переведен в режим переднего плана.

Соседние файлы в папке Операционные системы