Вы, наверное, заметили, что, после того, как вы ввели команду в
Терминал
'е, вам обычно нужно дождаться завершения ее работы, прежде
чем 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, и восстанавливать их в приоритетном режиме, когда вам это понадобится.