
- •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. Управление заданиями.
5. Процессы в состоянии zombie.
Эксперименты проводятся с группой процессов (множеством процессов, имеющих одинаковый идентификатор PGID). Лидер группы - это тот процесс, который, вызывая fork, порождал членов группы. У самого лидера группы PGID равен его PID-у. Удобной формой команды ps для просмотра группы процессов является:
ps -O ppid,start,pgid
Одним из способов создать группу процессов является запуск последовательности команд в круглых скобках в командной строке. Разделителем команд внутри скобок является символ “;” . Для запуска этой последовательности команд оболочка делает системный вызов fork, поcледовательность команд в скобках обрабатывается созданным дочерним процессом оболочки, который становится лидером группы процессов, образуемых командами в скобках (у лидера группы PGID совпадает с PID):
(sleep 600; cat ФАЙЛ)
# где ФАЙЛ - это имя любого существующего текстового файла
^z
# останавливаем выполняемую группу и просматриваем процессы, видим что остановлен и возглавляющий группу дочерний процесс оболочки и первый процесс группы, узнаем PID первого процесса (sleep 600), завершаем его сигналом KILL (числовой его номер 9) и просматриваем процессы:
ps -O ppid,start,pgid
kill -9 PID_процесса_sleep_600
ps -O pgid,start,ppid
Приостановленный процесс sleep 600 убит, однако его структура “proc” не удалена, поскольку дочерний процесс оболочки также был остановлен сигналом с клавиатуры ^z и пока не будет продолжен, он не может прочитать статистику (код завершения и времена в режимах ядра и задачи убитого процесса sleep 600). Поэтому убитый процесс не может быть до конца удален и застревает в состоянии Zombie (Z), как вы и видите это в результате последней команды. Как только вы продолжите любым способом группу команд (fg или bg или командой kill послать сигнал CONT лидеру группы), дочерний процесс оболочки прочитает статистику, структура “proc” будет удалена, первый процесс группы завершится, второй процесс выдаст в STDOUT содержание файла ФАЙЛ и вся группа благополучно завершится:
kill -CONT PID_дочернего_процесса_оболочки(лидера_группы)
Рассмотрим еще один пример в котором задерживается структура “proc” удаляемого процесса:
man bash
^z
ps -wO pgid.start,ppid
Статьи документации в системе находятся в сжатом архиве поэтому при вызове руководства командой man требуется их распаковка и форматирование для вывода на экран порождает группу из 4 процессов: лидер группы (man), не интерактивная оболочка (sh) для вызова и обеспечения работы распаковщика сжатого файла документации, распаковщик сжатых файлов (zcat) и стандартный PAGER less -F для просмотра с листанием распакованного текста документации. Вы видите все эти 4 процесса в состоянии приостановки (T). В команде ps добавлена опция -w для показа в дополнительной строке окна информации колонки COMMAND, не уместившейся в одной строке окна.
Убиваем процесс sh и видим что он перешел в состояние зомби.
kill -9 pid_процесса_sh
ps -wO pgid.start,ppid
Тот же результат получится, если убивать последующий член группы процессов zcat. Однако, если убивать последнего члена группы, замыкающего этот конвейер из 4 процессов (PAGER less –F), то он застрянет в фазе, предшествующей Zombie. В этом случае статус процесса будет DE, что означает, что процесс начал выход из системы, но продолжить его не может пока не будет продолжен приостановленный процесс zcat, поскольку входной буфер PAGER-а less –F связан по конвейеру с предшествующим процессом zcat и выполняющим чтение с диска и распаковку информации:
kill -9 PID_less_F_последнего_члена_группы
ps -wO pgid.start,ppid
# вы увидите статус DE убиваемого процесса, что означает:
D – процесс в состоянии обмена с диском и
E – процесс в стадии выхода из системы (завершения).