Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта 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.

Таким способом вы можете запустить несколько заданий: каждой команде при этом будет присвоен номер задания. Команда shelljobs выводит список всех заданий, связанных с текущим shell'ом. Перед заданием ставится знак +, отмечающий последний процесс, запущенный в фоновом режиме. Для восстановления конкретного задания в приоритетный режим вы можете ввести команду fg <n>, где <n> - номер задания, например, fg 5.

Обратите внимание, что таким способом вы также можете приостанавливать или запускать полноэкранные приложения, такие как less или текстовый редактор Vi, и восстанавливать их в приоритетном режиме, когда вам это понадобится.


Пред. 

Уровень выше

 След.

Завершение командной строки 

Начало

 Заключительно слово