- •1. Клиент-серверная организация системного программного обеспечения.
- •2. Система электронной документации.
- •5. Процессы в состоянии zombie.
- •6. Атрибуты процесса. Ключевые слова команды ps.
- •Id,state,time,sl,re,pagein,vsz,rss,lim,tsiz,%cpu,%mem, command.
- •7. Сигналы.
- •9. Встроенные команды управления атрибутом cdir
- •10. Встроенная команда изменение атрибута umask
- •11. Управление заданиями.
11. Управление заданиями.
Группа из 3 builtin (bg,fg,jobs) входит в управление заданиями bash. Для управления заданиями используется также builtin посылки сигналов процессам kill и посылка сигналов интерактивному процессу с клавиатуры его управляющего терминала ^z – приостановить интерактивный процесс (suspend) и вернуть управление оболочке, ^c - прервать интерактивный процесс и ^d – конец данных, вводимых для интерактивного процесса с терминала. Имеется еще и сигнал завершения интерактивного процесса с выдачей дампа памяти ^\ , однако не стоит им пользоваться без надобности, всякий раз в текущий директорий будет разгружаться дамп памяти – файл, имя которого образовано базовым именем запущенной программы с суффиксом .core объемом до мегабайта, что перегрузит ваш HOME. Приостановка выполняющегося интерактивного процесса символом suspend (^z) выполняется немедленно и имеет побочным эффектом разгрузку буферов задержанного вывода (pending output) и предварительного ввода (typeahead) процесса.
Задание (job) образует каждый процесс, выполняющийся в фоновом режиме (background) и каждый приостановленный процесс (suspend). Задание также образует каждый конвейер (pipeline) – цепочка одновременно выполняющихся процессов с передачей данный от STDOUT левого процесса на STDIN правого процесса. В задании, порожденном конвейером, содержится таблица всех процессов, образующих цепочку, и все эти процессы являются членами одного и того же задания.
Чтобы запустить программу в фоновом режиме в конце командной строки запуска нужно поставить символ амперсант - & в виде отдельного токена (отделив пробелом от предшествующего слова). Когда bash стартует фоновый процесс, на терминал сообщение:
[4] 73895
В квадратных скобках – номер задания, за ним PID процесса, стартовавшего в фоновом режиме. Управление заданиями организуется оболочкой и каждая сессия имеет свое независимое от других множество заданий. Если из своего сеанса работы вы сделаете вызов оболочки даже того же самого типа, например из bash, который является login-shell, сделаете вызов вложенного bash, то у вложенного bash будет свой независимый список заданий и пока вы их все не завершите, вы не сможете вернуться в login-shell (exit не будет выполняться).
Существует несколько способов обратиться к заданию. Символ % является префиксом спецификации задания (jobspec), т.е. ставится перед спецификацией без пробела. Сама спецификация может иметь форму числовую – это номер задания или строковую – это начальный фрагмент командной строки вызова программы, в результате которой был создан процесс, образовавший задание. Можно также задавать произвольную подстроку командной строки, однозначно соответствующую заданию, для этого нужно использовать 2-символьный префикс %? . Если по контексту команды в качестве токена допускается только jobspec, то 1-символьный префикс % можно опускать. Пример:
./slp180.pl & # Запускаем программу в фоновом режиме в результате
# образуется задание, например [3] 73624
./slp.pl & # Запускаем программу в фоновом режиме в результате
# образуется задание, например [4] 73895
Любая из следующих команд переведет 2-е задание в интерактивный режим:
fg %4
fg 4
fg %./slp.
fg ./slp.
fg %?lp.
Но следующие команды не сработают и выдадут в STDERR сообщение:
“-bash: fg: lp: ambiguous job spec” (неоднозначная спецификация задания):
fg %./sl
fg %?lp
Следующая команда также не сработает, выдав в STDERR сообщение:
“-bash: fg: lp: no such job” (нет такого задания), т.к. нет “./” в начале :
fg %slp.pl
Список заданий данного экземпляра оболочки на данный момент просматривается командой jobs.
jobs [-lnprs] [ jobspec ... ]
jobs -x command [args ...]
-l - добавить PID процесса к обычным N job и командной строке запуска процесса, образовавшего задание;
-p – выводить только PID процессов, образующих задания
-n выводить список только тех заданий, которые изменили статус после последнего оповещения об их статусе на терминал.
-r - ограничить вывод только выполняющимися в данный момент заданиями
-s - ограничить вывод только приостановленными заданиями
