nextuppreviouscontents
Next:Работа с редактором viUp:Управление заданиямиPrevious:Перевод заданий в фоновый

Приостановка и продолжение работы заданий

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

Запустим сначала процесс командой yes на переднем плане, как это делалось раньше:

/home/larry# yes > /dev/null
Как и ранее, поскольку процесс работает на переднем плане, приглашение командной оболочки на экран не возвращается.

Теперь вместо того, чтобы прервать задание комбинацией клавиш Ctrl-C, задание можно приостановить (suspend, буквально -- "подвесить"). "Подвешенное" задание не будет уничтожено; его выполнение будет временно остановлено до тех пор, пока оно не будут возобновлено. Для приостановки задания надо нажать соответствующую комбинацию клавиш, обычно это Ctrl-Z.

/home/larry# yes > /dev/null
{ctrl-Z}
[1]+  Stopped                 yes >/dev/null
/home/larry#
Приостановленный процесс попросту не выполняется. На него не тратятся вычислительные ресурсы процессора. Приостановленное задание можно запустить выполняться с той же точки, как будто бы оно и не было приостановлено.

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

/home/larry# fg
yes >/dev/null
  Командная оболочка еще раз выведет на экран название команды, так что пользователь будет знать, какое именно задание он в данный момент запустил на переднем плане. Приостановим это задание еще раз нажатием клавиш Ctrl-Z, но в этот раз запустим его в фоновый режим командой bg (от слова "background" -- фон). Это приведет к тому, что данный процесс будет работать так, как если бы при его запуске использовалась команда с символом "&" в конце (как это делалось в предыдущем разделе):
/home/larry# bg
[1]+ yes $>$/dev/null  & 
/home/larry#
При этом приглашение командной оболочки возвращается. Сейчас команда jobs должна показывать, что процесс yes действительно в данный момент работает; этот процесс можно уничтожить командой kill, как это делалось раньше.

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

Между заданиями в фоновом режиме и приостановленными заданиями есть большая разница. Приостановленное задание не работает -- на него не тратятся вычислительные мощности процессора. Это задание не выполняет никаких действий. Приостановленное задание занимает некоторый объем оперативной памяти компьютера, хотя оно может быть перенесено в своп. Напротив, задание в фоновом режиме выполняется, использует память и совершает некоторые действия, которые, возможно, вам требуются, но вы в это время можете работать с другими программами.

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

/home/larry# yes &
(стандартный вывод не был перенаправлен на устройство /dev/null), то на экран будет выводится бесконечный поток символов y. Этот поток невозможно будет остановить, поскольку комбинация клавиш Ctrl-C не воздействует на задания в фоновом режиме. Для того, чтобы остановить эту выдачу, надо использовать команду fg, которая переведет задание на передний план, а затем уничтожить задание комбинацией клавиш Ctrl-C.

Сделаем еще одно замечание. Обычно командой fg и командой bg воздействуют на те задания, которые были приостановлены последними (эти задания будут помечены символом "+" рядом с номером задания, если ввести команду jobs). Если в одно и то же время работает одно или несколько заданий, задания можно помещать на передний план или в фоновый режим, задавая в качестве аргументов команды fg или команды bg их идентификационный номер (job ID). Например, команда

/home/larry# fg %2
помещает задание номер 2 на передний план, а команда
/home/larry# bg %3
помещает задание номер 3 в фоновый режим. Использовать PID в качестве аргументов команд fg и bg нельзя.

Более того, для перевода задания на передний план можно просто указать его номер. Так команда

/home/larry# %2
будет эквивалентна команде
/home/larry# fg %2
Важно помнить, что функция управления заданием принадлежит оболочке. Команды fg, bg и jobs являются внутренними командами оболочки. Если, по некоторой причине, вы используете командную оболочку, которая не поддерживает функции управления заданиями, то вы в ней этих (и подобных) команд не отыщете.

Кроме этого, имеются еще некоторые различия в том, как осуществляется управление заданиями в оболочках bash и tcsh. В действительности некоторые оболочки вообще не имеют функций управления заданиями (хотя большинство оболочек в системе Linux такие функции имеет).


nextuppreviouscontents
Next:Работа с редактором viUp:Управление заданиямиPrevious:Перевод заданий в фоновый
root

Sun Aug 29 12:01:30 MSD 1999