Linux Labs

Пользователи, права, процессы / Ступень 12 из 13

Сигналы и завершение процессов

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 9 · на машине · 8 мин

Процесс, который не убить

Бывает строка процесса, которую не убирает даже kill -9, — с буквой в STAT, которой не было в прошлых уроках. Посмотри на такую строку и попробуй убрать её сигналом KILL.

Упражнение · посмотреть

Строка Z и kill -9

В каталоге ~/zombie-lab выполни три команды: строки программы spooler, kill -9 по процессу из файла zombie.pid и снова его строку. $(cat zombie.pid) подставляет в команду содержимое файла — номер процесса.

Сначала предположи

Что покажет последняя команда после kill -9?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа

Z — зомби. Процесс уже завершился: его программа не выполняется, память освобождена. В таблице процессов осталась строка с кодом завершения — его должен забрать родитель. Ты делал то же в оболочке: wait забирал код фонового задания.

Пока родитель не забрал код, строка висит. Сигнал ей не поможет: получать его некому, поэтому kill -9 завершился без ошибки, а строка осталась. Если родитель завершится, его зомби достаются systemd с PID 1, и тот сразу забирает их коды.

Один зомби безвреден: он не занимает ни процессор, ни память. Беда — в родителе, который не забирает коды: зомби копятся. Поэтому разбираются с родителем: по PPID находят программу и выясняют, умеет ли она забрать коды по просьбе. Завершить родителя — крайняя мера: вместе с ним остановится и его работа.

Проверь себя 1 вопрос

В ps висит строка Z, её родитель — рабочая программа. Что уберёт строку?

  • Строка Z — запись в таблице процессов, к файлу программы она не привязана. Её убирает родитель, когда забирает код.

  • Строка висит, пока родитель жив и не забрал код. Её забирает родитель, а после его завершения — systemd.

  • Зомби уже завершился, сигнал ему ничего не сделает: в упражнении строка Z после kill -9 осталась на месте.

Зомби уже завершился и ждёт, пока родитель заберёт код завершения. Поэтому разбираются с родителем: найти его по PPID и выяснить, может ли он забрать код, не завершаясь.

Ubuntu 24.04
Загрузка…