Продвинутая работа с процессами
Управление процессами в Linux включает в себя использование продвинутых инструментов для анализа и ограничения поведения процессов.
strace
strace показывает, как процесс взаимодействует с операционной системой. Он отслеживает системные вызовы (например, чтение или запись файлов, открытие сетевых соединений, выделение памяти). Это полезно, если программа работает неправильно или зависает, и нужно понять, что она делает.
Пример применения:
Если программа пытается открыть файл, которого не существует,strace
покажет сообщение вроде:
open("nonexistent_file.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
Это поможет быстро найти причину ошибки.
cgroups
cgroups дают возможность ограничивать использование ресурсов (ЦП, память, ввод/вывод) для групп процессов. Это полезно, если процесс потребляет слишком много памяти, процессора или активно нагружает диск.
Например, вы можете ограничить программу так, чтобы она использовала не больше 1 ГБ памяти или 10% процессора. Если программа пытается превысить лимит, система автоматически её замедлит или остановит. Это особенно важно для серверов или контейнеров (например, Docker), где одна программа не должна "захватить" все ресурсы системы.
lsof
lsof показывает список открытых файлов и сетевых соединений. Это полезно, если вы хотите узнать, какой процесс использует файл, который нельзя удалить, или какие программы слушают порты для сетевых соединений.
Как это всё работает вместе?
Представьте, что у вас есть программа, которая:
- Использует слишком много ресурсов.
- Зависает или работает некорректно.
- Блокирует файл, который нужно удалить.
С этими инструментами вы можете:
htop
: Найти процесс и понять, сколько ресурсов он потребляет.strace
: Выяснить, что именно делает процесс (например, пытается открыть недоступный файл или подключиться к серверу).cgroups
: Ограничить ресурсы, чтобы процесс не нарушал работу системы.lsof
: Узнать, какие файлы или сетевые порты использует процесс, и устранить блокировки.
Задачи
-
Создайте интенсивную нагрузку на ЦП.
Придумайте, как запустить процесс, который будет потреблять значительную часть ЦП. Найдите инструмент для мониторинга нагрузки на процессор и определите, какие процессы используют больше всего ресурсов. Ограничьте использование ресурсов для одного из них с помощью cgroups и убедитесь, что ограничения работают.
-
Создайте процесс, который активно потребляет оперативную память.
Найдите PID этого процесса. Ограничьте использование памяти этим процессом с помощью cgroups и убедитесь, что ограничения работают.
-
Проанализируйте системные вызовы программы.
Запустите команду, например
ls
, и изучите, какие системные вызовы она делает. -
Создайте ситуацию с заблокированным файлом
Представьте, что вы пытаетесь удалить или изменить файл, но система сообщает, что файл занят:
rm: cannot remove 'important_file.txt': Device or resource busy
Вам нужно создать подобную ситуацию, при которой некоторый файл будет занят (например, через
vim
). Найдите процесс, удерживающий файл, с помощьюlsof
и завершите его.