


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 такие функции имеет).



Next:Работа
с редактором viUp:Управление
заданиямиPrevious:Перевод
заданий в фоновый
root
Sun Aug 29 12:01:30 MSD 1999