Свободные программы и системы в школе

ОглавлениеДобавить в закладки К обложке

PID, как мы уже знаем, это уникальный идентификатор процесса39, а PPID – идентификатор его родителя. Обратите внимание на соответствие между PPID различных процессов в примере и расположением их в сформированном ключом «-H» «дереве».

TIME – время процесса – это совокупное количество процессорного времени, потребленного процессором на выполнение этого процесса за время его существования.

S – это состояние процесса. Запущенный процесс может находиться в одном из четырех стандартных состояний: «R» (выполняемый), «S» (ожидающий ввода-вывода), «T» (приостановленный – приостановку процессов мы обсудим ниже), «Z» («зомбированный», уже завершенный, но не успевший сообщить об этом процессу-родителю).

Итак, в примере на Рис. 1-46 мы видим:

находящийся в корне дерева процесс «init»;

два порожденных им процесса, не имеющих управляющего терминала: демон управления системой энергосбережения «apmd»40 и демон периодического исполнения заданий «crond»;

порожденный процессом init процесс «login» с tty1 в качестве управляющего терминала;

порожденный этим процессом «login» процесс «bash» – экземпляр оболочки также с tty1 в качестве управляющего терминала;

порожденный процессом «bash» процесс «xinit» (это сценарий, запускающий компоненты графической среды);

порожденные процессом «xinit» процессы «X» (это сервер оконной системы X, он запущен в качестве демона, т.е. без управляющего терминала) и «blackbox» (это менеджер окон графической среды);

порожденные процессом «blackbox» процессы «soffice.bin» (это словарный процессор «OpenWriter», в котором набирается данный текст), «mozilla-bin» (браузер «Мозилла»), «xterm» (эмулятор текстового терминала). Они не имеют управляющего терминала;

порожденный эмулятором терминала процесс оболочки «bash» с псевдотерминалом pts/0, назначенным при запуске эмулятора терминала, в качестве управляющего;

порожденный этой оболочкой процесс «ps», который и осуществил приведенный в примере вывод;

порожденный процессом «init» процесс «login» и порожденный им процесс «bash» на терминале tty2.

Управление заданиями и сигнализация процессов

В среде стандартной оболочки и команд открытой ОС запустить бесконечный процесс можно, введя команду «( while : ; do : ; done )», запускающую бесконечный цикл в подчиненном экземпляре оболочки (Рис. 1-47).

Пока не нужно беспокоиться о понятности синтаксиса управляющих конструкций.

Рис. 1-47

Если Алиса все сделала правильно, то сценарий сам по себе уже не остановится никогда (скорее всего, до разгрузки системы). Приглашения оболочки Алиса тоже уже не получит, поэтому даже не сможет выйти из системы.

Справиться с этой ситуацией ей поможет клавиатурная комбинация Control-C. Как и комбинация Control-D, она не отображается на экране, но после ее нажатия Алиса получает приглашение оболочки и при помощи команды «ps» убеждается, что никаких процессов, кроме самой оболочки и «ps», под этой оболочкой не выполняется.

Рис. 1-48

Клавиатурная комбинация Control-C побуждает драйвер терминала отправить сигнал нормального завершения выполняемому процессу (в данном случае, подчиненной оболочке).

Клавиатурная комбинация Control-Z побуждает драйвер терминала отправить выполняемому процессу другой сигнал – приостановки41.

Рис. 1-49

После нажатия Control-Z оболочка выдает сообщение, состоящее из числа в квадратных скобках, слова «остановлен» («stopped» в стандартной локали) и введенной ранее команды (Рис. 1-49).

Число в квадратных скобках – это номер задания. Заданием является любая начавшая выполняться простая команда.

Состояние соответствующего процесса (колонка «S» в выводе «ps -l» (эль)) обозначено буквой «T», означающей, что процесс остановлен. Задание, соответствующее такому процессу, также называется остановленным.

Возобновить исполнение задания можно двумя способами. Команда «fg» возобновляет выполнение задания на переднем плане, а команда «bg» – на заднем плане (или в фоновом режиме)42. Заданием переднего плана называется задание, завершения ведущего процесса (первого процесса, запущенного подачей команды) которого ожидает оболочка перед выводом очередного приглашения, и которое может свободно выводить данные на управляющий терминал и вводить их с терминала.


Логин
Пароль
Запомнить меня