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.

. .