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