Инсталляция Linux и первые шаги

         

Остановка и возобновление работы


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

можете начать работу нормально (в режиме переднего плана),

остановить работу и продолжить в фоновом режиме.

Сначала начнем работу "нормально":

/home/larry# yes > /dev/null

Поскольку опять работа выполняется на переднем плане, вы не

получите обратно на экран подсказку shell.

Теперь, вместо того, чтобы прерывать работу с помощью

ctrl-C, мы остановим работу. Приостановка работы не убивает ее.

Чтобы осуществить приостановку работы, надо нажать соответствующие

клавиши, обычно это ctrl-Z.

/home/larry# yes > /dev/null

[ctrl-Z]

[1]+ Stopped yes >/dev/null

/home/larry#

Пока работа остановлена, она просто не выполняется. На нее

не тратится время процессора. Но вы всегда можете возобновить

работу, и она продолжится как ни в чем не бывало.

Для возобновления работы в режиме переднего плана

используйте команду fg (``foreground'' - передний план).

/home/larry# fg

yes >/dev/null

Shell снова выдаст на экран имя команды, чтобы вы могли

проконтролировать, какую работу вы активизировали в режиме

переднего плана. Вновь остановите работу с помощью ctrl-Z. В

этот раз используйте команду bg (``background'' - задний план,

фоновый режим), чтобы перевести работу в фоновый режим. Эффект

будет аналогичен тому, как если бы вы набрали после команды

``&''.

/home/larry# bg

[1]+ yes >/dev/null &

/home/larry#

И мы получили назад подсказку. Команда jobs сообщит, что

команда yes действительно выполняется, и мы можем снова ее убить

с помощью команды kill, как мы это уже делали.

Как теперь остановить работу? Использование ctrl-Z не

поможет, поскольку работа находится в фоновом режиме. Ответ -

переместить работу на передний план, а затем остановить. Вы

можете использовать fg как для остановленных работ, так и для

работ, находящихся в фоне.

Существует большая разница между фоновой работой и

остановленной. Остановленная работа не выполняется и не

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


в этот момент не делает (но занимает память, хотя по воле

своппинга может оказаться на диске). Работа в фоновом режиме и

выполняется, и занимает память. Она может даже выводить

что-то на экран, хотя это может раздражать вас, когда вы

работаете над чем-то другим. Например, если вы использовали

команду:

/home/larry# yes &

без перенаправления stdout в /dev/null, поток "y" будет

выводиться на экран без возможности прервать это (вы не сможете

использовать ctrl-C для прерывания работ фонового режима).

Чтобы остановить эту бесконечную выдачу, вам следует использовать

команду fg для перевода работы в режим переднего плана, а затем

использовать ctrl-C, чтобы ее убить.

Еще одно замечание. Команды fg и bg обычно переводят на

передний план или в фоновый режим работы, которые были

остановлены последними (что определяется символом ``+'' после

номера работы, это когда вы используете команду jobs). Если вы

выполняете много работ одновременно, вы можете перевести на

передний план или, наоборот, в фоновый режим конкретную работу

заданием идентификатора работы в качестве аргумента команд fg или

bg, как в

/home/larry# fg %2

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

/home/larry# bg %3

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

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

Кроме того, использование только номеров работ, как в

/home/larry# %2

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

/home/larry# fg %2

Помните, что управление работами, это свойство shell.

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

какой-то причине вы используете shell, который не поддерживает

управление работами, там вы не найдете этих команд.

В дополнение к этому, есть некоторые аспекты управления

работами, которые различаются в Bash и Tcsh. Некоторые оболочки не

имеют управления работами, хотя большинство оболочек Linux имеют такую

возможность.


Содержание раздела