Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
26
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

1.2. Проверка возможностей управления работой и процессами в shell

Начнем с простого примера. Команда yes  команда, которая посылает бесконечный поток “y” на стандартное устройство вывода. Выполните команду yes.

/home/student$ yes

y

y

y

Вы можете закончить процесс, нажав клавиши прерывания  Ctrl-C. Перенаправив поток бесконечных “y” в /dev/null (это так называемое нуль – устройство, которое выступает в качестве "черной дыры" для данных) командой:

/home/student$ yes > /dev/null

мы увидим, что на экран ничего не выводит, но и подсказка shell не появляется. Это потому, что программа продолжает работать, посылая “y” в /dev/null. Нажмите клавиши прерывания, чтобы прекратить это.

Так как мы хотим, чтобы команда yes продолжала работать, но также хотим получить назад подсказку shell, чтобы выполнять другие работы. Мы можем перевести команду yes в фоновый режим, который разрешит ей выполняться без взаимодействия с пользователем. Чтобы переместить процесс в фоновый режим, необходимо после команды ввести символ “&”.

/home/student$ yes > /dev/null &

[1] 164

/home/student$

Оболочка, готовая к приему новых команд. [1] - номер работы для программы yes. Shell приписывает номер каждой выполняемой работе. Поскольку “yes”( одна единая работа, которая в данный момент выполняется, ей присвоенный номер 1. 164 - идентификатор процесса (PID). Этот номер, присвоенный системой процессу. Любой из этих номеров можно использовать при обращении к работе, так как эти номера уникальные.

Теперь мы имеем выполняемый процесс yes в фоновом режиме, который непрерывно посылает поток “y” в /dev/null. Чтобы проверить состояние этого процесса, используйте внутреннюю команду shell  jobs.

/home/student$ jobs

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

/home/student$

Можете также воспользоваться командой ps, для проверки статуса работ.

Существует большая разность между фоновой работой и остановленной. Работа в фоновом режиме и выполняется, и занимает память. Она может даже выводить что-то на экран, когда вы работаете над чем-то другим.

Для завершения работы используйте команду kill. Эта команда может использовать в качестве аргумента как идентификатор процесса (см. выше), так и номер работы оба варианта использования эквивалентны.

Это была работа номер 1, так, что, используя команду

/home/student$ kill %1

мы ликвидируем работу. При идентификации работы по номеру необходимо впереди ставить символ процента (%).

Теперь, после уничтожения процесса, снова воспользуемся командой jobs:

/home/student$ jobs

[1]+ Terminated yes >/dev/null

/home/student$

Есть другой способ перевести роботу в фоновый режим. Вы можете начать в режиме переднего плана, прекратить работу и продолжить ее в фоновом режиме.

Выполните команду yes > /dev/null

/home/student$ yes > /dev/null

Поскольку снова работа выполняется на переднем плане, вы не получите назад на экран подсказку shell.

Теперь, вместо того, чтобы перерывать работу (с помощью Ctrl-C), мы её прекратим не уничтожая. Для этого нажмем соответствующие клавиши- Ctrl-Z.

/home/student$ yes > /dev/null

[ctrl-Z]

[1]+ Stopped yes >/dev/null

/home/student$

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

Для возобновления работы в режиме переднего плана используйте команду fg (“foreground”  передний план).

/home/student$ fg

yes >/dev/null

Shell снова выдаст на экран имени команды, чтобы вы могли проконтролировать, какую работу вы активизировали в режиме переднего плана. Снова прекратите работу с помощью Ctrl-Z. В этот раз используйте команду bg (“background”  задний план, фоновый режим), чтобы перевести роботу в фоновый режим. Эффект будет аналогичный тому, как если бы вы набрали после команды “&”.

/home/student$ bg

[1]+ yes >/dev/null &

/home/student$

Команда jobs сообщит, что команда yes действительно выполняется, и мы можем снова ее уничтожить с помощью команды kill, как мы это уже делали.

Как теперь прекратить работу? Использование Ctrl-Z не поможет, поскольку работа находится в фоновом режиме. Ответ  переместить работу на передний план, а потом остановить.

Команды fg и bg переводят на передний план или в фоновый режим работы, которые были остановлены последними (это определяется символом “+” после номера работы, это когда вы используете команду jobs). Если вы выполняете много работ одновременно, вы можете перевести на передний план или, наоборот, в фоновый режим конкретную работу задачам идентификатора работы, как аргумента команд fg или bg.

/home/student$ fg %2

(перевод на передний план работы номер 2) или

/home/student$ bg %3

(перевод в фон работы номер 3).

Для этих команд нельзя использовать идентификаторы процессов.

/home/student$ %2

эквивалентно

/home/student$ fg %2

Команды fg, bg и jobs  внутренние команды shell. Если по какой-то причине вы используете shell, который не поддерживает управления роботами, там вы не найдете этих команд.

При попытке выхода из оболочки, в которой запущены фоновые задания, с помощью команды exit или клавиши Ctrl-D система показывает предупреждающее сообщение: “Есть остановленные (работающие) задания”. Для просмотра списка этих заданий введите команду jobs. При немедленной повторной попытке выхода оболочка завершит все приостановленные и работающие задания без предупреждения.