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