
KTNI_Kozlov_otvety / 31
.doc31. Фоновый и интерактивный режимы. Команды остановки и перевода заданий между режимами.
Некоторые команды выполняются довольно продолжительное время и при этом занимают окно терминала, в котором запуск других команд невозможен. Такой режим запуска команд и приложений называется интерактивным. Окно терминала в интерактивном режиме недоступно для запуска других команд и приложений. При запуске любого исполняемого приложения в интерактивном режиме пользователю в командном приглашении надо просто ввести название команды и нажать Enter. При этом в данном командном приглашении Linux больше ничего ввести не удастся, пока не выполнится предыдущее приложение.
Если же требуется выполнить с одной командной строки несколько приложений, то предыдущее приложение нужно перевести в фоновый режим либо изначально запускать задачу в фоновом режиме. Фоновые операции особенно удобны при выполнении заданий, требующих много времени. При выполнении печати, например, можно одновременно редактировать какой-нибудь файл или управлять работой команды, а именно, изменять приоритет выполнения команды, приостанавливать и даже удалять. Для того чтобы выполнить задачу в фоновом режиме, необходимо в конце ее поставить амперсанд (&).
Фоновый режим применяется, когда требуется из одного терминального окна запустить сразу несколько команд. Чтобы не ждать окончания выполнения приложения, можно просто запустить приложение в фоновом режиме. При вводе такой команды в фоновом режиме система выдает на экран номер задания пользователя и системный номер процесса. При этом система указывает в квадратных скобках номер задания, по которому пользователь может следить за ним и им управлять. Так же отображается системный номер процесса – номер, под которым задание проходит в системе. В фоновый режим можно переместить несколько задач, при этом система каждой присваивает номер для связи с пользователем.
В следующем примере показан запуск текстового редактора с графическим интерфейсом приложения kedits в фоновом режиме:
[antonk@lab4236s ~]$ kedits &
[1] 13617
[antonk@lab4236s ~]S kbuildsycoca running...
Как видно из командного приглашения Linux, данная задача является первой для этого терминального окна, а номер процесса, который она породила, - 13617.
Система выдает на экран номер задания пользователя и системный номер процесса. Номер задания, заключенный в квадратные скобки, – это номер, по которому пользователь может сослаться из командной строки на конкретное задание. Номер процесса – это номер, под которым задание проходит в системе. В фоновый режим можно переводить несколько команд. Каждая из них рассматривается как задание и получает имя и номер задания.
Для получения списка заданий, выполняемых в фоновом режиме, применяется команда jobs. Заданием (job) называется процесс, выполняющийся под управлением терминала и связанный с PID (ID процесса). Каждому заданию командный интерпретатор присваивает уникальный номер. Управление рядом заданий через командный интерпретатор называется управлением заданиями (job control). Каждая позиция списка состоит из номера задания (в квадратных скобках), указания на то, остановлено оно или выполняется, и имени задания. Знак «+» обозначает задание, выполняемое в данный момент, а знак «–» обозначает следующее подлежащее выполнению задание.
В приведенном ниже примере в фоновый режим переводится команда kedit и выполняется как задание. Затем с помощью команды jobs выдается список существующих в системе заданий с указанием, какое из них выполняется в данный момент. При этом вы в любой момент времени можете отменить выполнение команды. Особенно это удобно, когда вы послали большой документ на печать, а во время печати решили его отменить. Прерывание команды используется редко и в некоторых случаях осуществляется непреднамеренно. Например, при желании можно прервать сеанс редактирования, чтобы отправить почту, а затем вернуться в него, продолжив работу с того места, где он был прерван.
[antonk@lab4236s lab4 ]$ kedit
Ctrl-Z
[antonk@lab4236s lab4 ]$ bg %2
Существует возможность перевода задания из фонового режима в интерактивный или приоритетный (foreground). Для этих целей служит команда fg (сокращение от foreground). При постановкие только одного задания в фоновый режим перевод в приоритетный режим осуществляется указанием команды fg без параметров. Если же в фоновом режиме выполняется несколько заданий, необходимо при использовании команды добавлять номер задания. Этот номер указывается после команды fg, причем перед ним ставится символ %.
Например, переведем задание 2, ранее поставленное в фоновый режим, обратно в интерактивный режим:
[antonk@lab4236s lab4 ]$ fg %2
Если задание с таким номером есть, то оно переведется в интерактивный режим, а если задания с таким номером нет, то появится надпись, свидетельствующая, что задания с таким номером нет:
[antonk@lab4236s ~]$ fg %2
-bash: fg: %2: no such job
[antonk@lab4236s ~]$
При переводе задания из приоритетного режима в фоновый применяется команда bg (background). Эта команда обычно используется для прерванных заданий.
В следующем примере покажем возврат задания 10 в приоритетный режим. На данном этапе можно моментально получить возможность ввести команду, поскольку вторая команда находится в приоритетном режиме и выполняется. Как только команда завершит свое выполнение, снова появится приглашение, и вы сможете выполнить другую команду.
[antonk@lab4236s ~]$ fg %10
Контролировать задания через их номера ID можно при помощи команд, представленных в табл.19.
Таблица 19 Команды по управлению заданиями
|
Контроль за выполнением задания осуществляется только в том окне, где оно было запущено.