Иллюстрированный самоучитель по Linux

Управление заданиями

Для многозадачной системы, каковой и является Linux, функция управления заданиями особенно важна, так как позволяет управлять несколькими программами, выполняемыми одновременно в одной оболочке.

Как правило, введенная команда выполняется в режиме переднего плана. Это означает, что подсказка командной строки возвращается на экран только после того, как завершится выполнение команды. Интерактивные программы, наподобие emacs, захватывают экран или окно, в котором запущена оболочка, и возвращают их командной строке только после завершения работы. Неинтерактивные программы, например find, не захватывают экран; тем не менее, и в этом случае подсказка командной строки возвращается на экран только после завершения программы.

Предположим, вы ввели следующую команду:

$ find / – name '*.tmp' – print > templist

Это команда поиска во всех каталогах системы Linux файлов с расширением .trap и вывода результатов поиска на стандартное устройство вывода. Вывод переадресован в файл templist для последующей обработки. Это означает отсутствие какого-либо вывода на экран. Тем не менее, ввести другую команду до окончания поиска не удастся.

Такая ситуация противоречит идее многозадачности. Необходим способ, с помощью которого можно было бы после ввода команды поиска, не дожидаясь ее завершения, запустить другую программу.

Решить задачу помогает запуск программ в фоновом режиме. Если запускать задания в фоновом режиме, подсказка командной строки будет оставаться на экране, а новые задания можно будет запускать, не дожидаясь завершения уже запущенных.

Простейший способ запуска задания в фоновом режиме – завершение команды запуска знаком амперсанда (&). Этот знак заставляет оболочку запускать команду в фоновом режиме с незамедлительным возвратом подсказки командной строки на экран. Приведенная ранее команда поиска, выполняемая в фоновом режиме, будет иметь вид:

$ find / – name '*.tmp' – print > templist &

Сразу после нажатия Enter на экран возвратится подсказка командной строки. Одновременно начнется выполнение команды поиска.

Чтобы получить список заданий, выполняемых в фоновом режиме, введите команду jobs оболочки Bash. Результат ее выполнения будет примерно следующим:

$ jobs
[1]+ Running find / – name ' *.tmp' – print >templist &

Итак, ответ команды показывает, что в системе выполняется одно задание, что выполняется оно в фоновом режиме (о чем свидетельствует знак "&"), и что это команда:

find / – name ' * .tmp' – print >templist &.

Если в фоновом режиме выполняется несколько заданий, то результат может выглядеть иначе:

[1] – Running find / – name '*.tmp' – print >templist &
[2]+ Running ls – 1R / >dirlist &

Если программа запущена в режиме переднего плана, ее можно перевести в фоновый режим. Комбинация клавиш CTRL + Z интерпретируется оболочкой Basfi как команда временной остановки текущего процесса. Например, если команду поиска из предыдущего примера запустить в режиме переднего плана, то после нажатия CTRL + Z поиск временно прекращается. Если теперь ввести команду jobs, результат будет следующим:

[1]+ Stopped find / – name '*.tmp' – print >templist

Обратите внимание: теперь в столбце состояния указано Stopped (остановлено) вместо Running (выполняется). Это задание можно перевести в фоновый режим следующей командой:

$ bg 1

…где единица указывает номер задания. Выполняя одно задание, его номер можно не указывать:

$ bg

После того, как остановленное задание переводится в фоновый режим его выполнение возобновляется, и команда jobs показывает его состояние как Running.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.