Введение
Команда безопасности может продолжать работать, хотя полезная работа уже остановилась. Перед остановкой чего-либо нужно определить нужный процесс и понять, какая другая активность должна остаться доступной.
Эта работа предоставляет безвредные учебные процессы и журнал приложения. Вы изучите сведения о процессах, поработаете с заданием терминала, остановите один выбранный процесс и извлечёте диагностику, не затрагивая службы платформы.
Изучите процессы и управляйте заданием терминала
На этом шаге вы изучите работающие процессы и сравните работу на переднем плане и в фоне терминала.
Войдите в Kali и выберите общую рабочую папку:
kali
cd /home/labex/project
Процесс — работающая программа с идентификатором процесса (PID) и владельцем. ps выводит снимок состояния. Параметр -e выбирает все процессы, а -o — показываемые поля:
ps -eo pid,user,args
Найдите подготовленные учебные процессы Python и их владельца kali. Не затрагивайте посторонние процессы платформы и контейнера.
top обычно обновляется непрерывно. -b выбирает печатаемый пакетный вид, а -n 1 ограничивает его одним обновлением:
top -b -n 1
Это показывает снимок ресурсов вместо перехода в интерактивный экран. PID и значения ресурсов различаются.
Команда переднего плана занимает терминал до завершения. sleep ждёт указанное число секунд без вывода. Начните намеренно долгое ожидание:
sleep 30
Нажмите Ctrl+C, чтобы прервать эту команду переднего плана и вернуть приглашение. Ctrl+C полезно, когда нужно остановить команду, сейчас занимающую терминал.
Завершающий & запускает команду в фоне, позволяя оболочке сразу принимать другие команды. Запустите один временный таймер:
sleep 300 &
Оболочка выводит номер задания, например [1], и PID. jobs -l перечисляет фоновые задания этой оболочки вместе с PID:
jobs -l
Вы должны увидеть работающее задание sleep 300. Оставьте его работающим для проверки этого шага. Сохраните тот же терминал открытым для следующего шага; номера заданий принадлежат этому сеансу оболочки.
Остановите только зависший процесс и прочитайте журнал
На этом шаге вы остановите выбранный учебный процесс, сохраните другой и запишете нужные строки ошибок.
В той же оболочке Kali остановите временный фоновый таймер. kill отправляет сигнал; сигнал завершения по умолчанию просит процесс выйти. Ссылка на задание %1 адресует первое задание, созданное в этой новой оболочке:
kill %1
Оболочка может вывести уведомление о завершении. Для процесса, запущенного вне заданий вашей оболочки, сначала определите PID. pgrep -a выводит PID и полную командную строку совпадений; -f ищет по полной командной строке:
pgrep -af stalled-worker.py
Нужная команда — python3 /opt/labex/stalled-worker.py. Это безвредный учебный процесс, ожидающий бесконечно. Отдельный процесс training-heartbeat.py должен продолжать работать.
Можно передать найденный PID в kill с помощью подстановки команды. $(...) выполняет внутреннюю команду и подставляет её вывод; двойные кавычки сохраняют вывод одним аргументом. Якоря ^ и $ сопоставляют полную ожидаемую команду вместо более широкого частичного имени. Остановите только этот точный процесс:
kill "$(pgrep -f '^python3 /opt/labex/stalled-worker.py$')"
Выполните это один раз; после выхода процесса повторный запуск не найдёт PID. Команда должна вернуться без вывода. Подтвердите, что сохраняемый процесс всё ещё присутствует:
pgrep -af training-heartbeat.py
Его PID может отличаться, но путь команды должен остаться в списке.
Журнал приложения записывает события текстом. Предоставленный учебный журнал — worker.log; упражнение не требует доступа к systemd или журналам ядра. Прочитайте журнал:
cat /home/labex/project/worker.log
Журнал смешивает информационные сообщения со строкой ERROR, описывающей зависшую операцию. Используйте уже изученные фильтрацию и перенаправление, чтобы сохранить только записи ошибок:
grep '^ERROR ' /home/labex/project/worker.log > /home/labex/project/worker-errors.txt
cat /home/labex/project/worker-errors.txt
Ожидаемый вывод:
ERROR training request exceeded its time limit
Вы остановили выбранный процесс, сохранили посторонний процесс и отделили диагностику от полного журнала.
Резюме
Вы изучили идентификаторы процессов, владельцев и командные строки, наблюдали прерывание переднего плана и фоновые задания, отправили адресный сигнал завершения и отфильтровали журнал приложения. Вы сохранили посторонний процесс, остановив выбранный зависший процесс.



