POSIX-shell: управление заданиями
Управление заданиями -- одна из важных функций командных оболочек, именно благодаря ей практически реализуется истинная многозадачность Unix-систем. И поэтому она появилась с самого момента их рождения, уже в Shell Борна.
Управление заданиями включает в себя следующие возможности:
- параллельный запуск нескольких программ, исполняемых в фоновом режиме;
- перевод в фоновый режим активной задачи;
- перевод в активный режим задачи, исполняемой как фоновая;
- просмотр списка текущих заданий.
Все эти действия осущетсвляются встроенными командами оболочки, о которых говорилось выше, поэтому пробежимся по ним в быстром темпе. Запуск нескольких заданий осуществляетс посредством конструкции
$ cmd1 & cmd2
и так далее. При этом каждая задача получает свой уникальный идентификатор -- номер задания. Он присваивается только в текущем экземпляре оболочки. Если в процессе выполнения какой-либо задачи создаётся новая копия оболочки (или вызывается другая командная оболочка, например, для выполнения
сценария), задания в ней будут нумероваться уже заново.
Просмотреть список текущих заданий (вместе с их номерами) можно
просмотреть посредством встроенной команды jobs
. Например, если у нас одновременно запущены проигрыватель mpeg-файлов, электронная таблица и текстовый редактор с помощью конструкции
$ mpg123 music/almazov/* & sc & joe &
вывод команды jobs
буде выглядеть следующим образом:
[1] running mpg123 music/almazov/* [2] -- suspended (tty output) sc [3] + suspended (tty output) joe
из которого видно, что задача [1]
находится в состоянии исполнения, а прочие -- в ожидании (в данном случае -- ввода/вывода). Причем -- по разному: символ +
в строке задания [3]
, вызванного в командной строке последним, показывает, что именно оно будет активизировано командой fg
без указания задания. Однако конкретное задание, например, электронную таблицу sc
, можно активизировать командой
$ fg sc
Напротив, перевести задание в фоновый режим можно командой bg [имя_задачи]
. На фоновые задачи не распространяется действие некоторых управляющих последовательностей. Так, в текущем примере прервать проигрывание аудиофайлов стандартной управляющей комбинацией Control+C не удастся, даже если остальные задачи будут закрыты: для этого придётся сначала сделать её активной с помощью команды fg mpg123
.