Bourne Again Shell (bash) - стр.4

Управление работами (job control)

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

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

$ уеs > /dev/null &
[1] 164


После ввода команды shell выдает два числовых значения и подсказку для ввода следующей команды. Здесь "1" представляет номер работы для программы yes. Shell приписывает номер каждой выполняемой работе. Поскольку "yes" - одна единственная работа, которая в данный момент выполняется, ей присвоен номер 1. "164" - идентификатор процесса (PID); это номер, присвоенный системой работе. Любой из этих номеров можно использовать при обращении к работе. Теперь мы имеем выполняемый процесс yes в фоновом режиме, непрерывно посылающий поток "у"-ков в /dev/null. Чтобы проверить состояние этого процесса, используется внутренняя команда shell -jobs.

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


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

$ kill %1

можно ликвидировать работу. При идентификации работы по номеру необходимо впереди ставить символ процента"%". После ликвидации, можно снова использовать jobs для проверки:

$ jobs
[1]+ Terminated       yes >/dev/null


Работа действительно прервана, и если мы снова воспользуемся командой jobs, на экран ничего не будет выведено. Можно также убить работу, используя номер идентификатора процесса (PID), который выводится наряду с номером. В нашем пример PID равен 164, так что команда

$ kill 164

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

$ kill %1

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

$ yes > /dev/null

Поскольку опять работа выполняется на переднем плане, вы не получите обратно на экран подсказку shell. Теперь, вместо того, чтобы прерывать работу с помощью Ctrl-C, мы остановим работу. Приостановка работы не убивает ее. Чтобы осуществить приостановку работы, надо нажать соответствующие клавиши, обычно это Ctrl-Z.

$ yes > /dev/null

[Ctri-Z]

[1]+ Stopped       yes >/dev/null

Пока работа остановлена, она просто не выполняется. На нее не тратится время процессора. Но всегда можно возобновить работу, и она продолжится с момента приостановления. Для возобновления работы в режиме переднего плана используется команда fg ("foreground" - передний план).

$ fg
yes >/dev/null


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

$ bg
[1]+ yes >/dev/null &


И мы получили назад подсказку. Команда jobs сообщит, что команда yes действительно выполняется, и мы можем снова ее убить с помощью команды kill. Чтобы остановить работу находящуюся в фоновом режиме необходимо переместить работу на передний план, а затем остановить. Вы можете использовать fg как для остановленных работ, так и для работ, находящихся в фоне.

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

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

$ fg %2

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

$ bg %3

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

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

$ %2

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

$ fg %2

Помните, что управление работами, это свойство shell. Команды fg, bg и jobs - внутренние команды shell.


назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net