<< Предыдущий раздел | /\ Содержание | >> Следующий раздел
Часто бывает нужно запустить "долгоиграющую" программу, которая все равно пишет данные только в файл (например, какие-либо вычисления), или графическое приложение, которое не пользуется окном терминала. Но ведь пока программа запущена, терминал "принадлежит" ей, и им больше ни для чего нельзя пользоваться!
Unix позволяет запускать задачи в "фоновом режиме": если в конце командной строки указать символ "&", то после запуска команды терминал можно продолжать использовать для ввода других команд.
Пример (запустить графический калькулятор):
bobby:~% xcalc & [1] 2616 bobby:~% _ |
В квадратных скобках shell печатает номер задания, а за ним -- номер процесса (об этом подробнее в следующем разделе).
Таким образом можно запустить в фоновом режиме несколько задач -- например, калькулятор, текстовый редактор и "снежную зиму":
bobby:~% xedit & [2] 2628 bobby:~% xsnow & [3] 2629 bobby:~% _ |
Посмотреть список запущенных задач можно командой "jobs":
bobby:~% jobs [1] running xcalc [2] - running xedit [3] + running xsnow bobby:~% _ |
(Символы "+" и "-" означают "последняя запущенная задача" и "предпоследняя").
Если у программы не предусмотрено способа завершить исполнение, то ее можно "убить" командой "kill":
bobby:~% kill %3 [3] + done xsnow bobby:~% _ |
Символ процента и следующий за ним номер являются ссылкой на конкретное задание.
Если задача случайно запущена без символа "&", то ее можно или завершить комбинацией клавиш Ctrl+C и потом запустить правильно, или "заморозить", нажав Ctrl+Z, а потом перевести в фоновый режим командой "bg" (сокращение от BackGround):
bobby:~% xcalc zsh: suspended xcalc bobby:~% bg %1 [1] + continued xcalc bobby:~% _ |
Бывает и обратное: случайно интерактивная программа (например, текстовый редактор) запущена в фоновом режиме. Интерактивные программы при этом автоматически "замораживаются" (потому, что они пытаются читать с терминала, который ей "не принадлежит"). Перевести их в "основной режим" можно командой "fg" (сокращение от ForeGround):
bobby:~% emacs -nw & [1] 2637 bobby:~% [1] + suspended (tty output) emacs -nw bobby:~% fg %1 [1] + continued emacs -nw |
|
Если командам bg и fg не указывать задачу, то они работают с последней запущенной -- той, что помечена символом "+". |
Если попробовать набрать "exit" для выхода из системы (или из окна терминала) при исполняющихся в фоновом режиме задачах, то zsh не позволит выйти:
bobby:~% xcalc & [1] 2691 bobby:~% exit zsh: you have running jobs. bobby:~% _ |
bobby:~% xcalc & [1] 2700 bobby:~% exit zsh: you have running jobs. bobby:~% exit zsh: warning: 1 jobs SIGHUPed |
Чтобы zsh не считал своей обязанностью "убитие" фоновых задач при выходе, можно заставить его забыть про них:
bobby:~% xcalc & [1] 2701 bobby:~% jobs [1] + running xcalc bobby:~% disown %1 bobby:~% jobs bobby:~% _ |
|
Другие оболочки (bash и tcsh) менее "заботливы", и завершают работу по первой же команде exit, оставляя фоновые задачи "беспризорными". |
Чтобы запустить фоновую задачу и заставить zsh сразу же забыть про нее, надо набрать всю команду (включая "&") в круглых скобках:
bobby:~% (xcalc &) bobby:~% jobs bobby:~% _ |
<< Предыдущий раздел | /\ Содержание | >> Следующий раздел