Библиотека сайта rus-linux.net
Запуск и обработка фоновых процессов: управление заданиями |
||
---|---|---|
Глава 3. Введение в командную строку |
Запуск и обработка фоновых процессов: управление заданиями
Вы, наверное,
заметили, что, после того, как вы ввели команду в Terminal
'е,
вам обычно нужно дождаться завершения ее работы, прежде чем shell
вернет вам управление. Это значит, что вы запустили команду в
приоритетном
режиме. Однако, бывают случаи,
когда это нежелательно.
Допустим,
например, что вы решили рекурсивно скопировать один большой каталог в
другой. Вы также решили игнорировать ошибки, поэтому вы перенаправили
канал ошибок в /dev/null
:
cp -R images/ /shared/ 2>/dev/null |
Выполнение
такой команды может занять несколько минут пока она не выполнится
полностью. У вас есть два варианта решения: первый - жестокий,
подразумевающий остановку (убивание) команды, а затем повторное ее
выполнение, но уже в более подходящее время. Для этого нажмите
Ctrl+c
:
при этом процесс будет завершен, а вы вернетесь назад к строке
приглашения. Но подождите, пока что не делайте этого! Читайте дальше.
Допустим,
вы хотите, чтобы команда выполнялась, а вы занимались чем-нибудь
другим. Решением будет запуск процесса в фоновом
режиме. Для этого нажмите Ctrl+z
,
чтобы приостановить процесс:
$ cp -R images/ /shared/ 2>/dev/null # Нажмите сейчас C-z [1]+ Stopped cp -R images/ /shared/ 2>/dev/null $ |
и вы снова в
строке приглашения. Процесс теперь находится в режиме ожидания,
ожидая вашей команды для его повторного запуска (как это отмечено
ключевым словом Stopped
).
Это как раз и есть то, что вам нужно, но уже в фоновом процессе.
Введите bg
(BackGround
- фоновый) для получения желаемого результата:
$ bg [1]+ cp -R images/ /shared/ 2>/dev/null & $ |
При этом
процесс продолжит свою работу, но уже как фоновая задача, как это
отмечено знаком &
(амперсанд) в конце строки. Затем вы вернетесь назад в строку
приглашения и сможете продолжить работу. Процесс, который выполняется
как фоновая задача, или в фоновом режиме, называется фоновым
заданием.
Конечно, вы можете сразу запускать процессы как фоновые задачи, добавляя знак & в конце команды. Например, вы можете запустить команду копирования каталога в фоновом режиме, набрав:
cp -R images/ /shared/ 2>/dev/null & |
Если хотите, вы
также можете восстановить этот процесс в приоритетный режим и
дождаться его завершения, набрав fg
(ForeGround
- приоритетный). Чтобы перевести его назад в фоновый режим, введите
следующую последовательность Ctrl+z
,
bg.
Таким способом
вы можете запустить несколько заданий: каждой команде при этом будет
присвоен номер задания. Команда shell
'а
jobs
выводит список всех заданий, связанных с текущим shell
'ом.
Перед заданием ставится знак +
,
отмечающий последний процесс, запущенный в фоновом режиме. Для
восстановления конкретного задания в приоритетный режим вы можете
ввести команду fg <n>,
где <n>
- номер задания, например, fg 5.
Обратите внимание, что таким способом вы также можете приостанавливать или запускать полноэкранные приложения, такие как less или текстовый редактор Vi, и восстанавливать их в приоритетном режиме, когда вам это понадобится.
Завершение командной строки |
Заключительно слово |