мета-данные страницы
Это старая версия документа!
Выполнение домашнего задания "Процессы Linux"
Задание
Шаг 1
- О текущем процессе:
- Кол-во дескрипторов
- Потребление памяти
- Путь до исполняемого файла
- О текущей системе:
- Какой процессор (сколько)
- Какая память (сколько)
- Вывести все в Json
Шаг 2
Запустить приложение из шага 1 в изоляции при помощи например Docker
*Advanced level запустить руками в cgroup и namespace
Сравнить вывод Json шага 1 и шага 2
Решение
Сбор информации о текущем процессе
Для сбора создадим скрипт
nano collecting_information_about_the_current_process.sh
#!/bin/bash
# Получаем PID текущего процесса
PID=$$
# Получаем количество дескрипторов
FD_COUNT=$(ls /proc/$PID/fd/ | wc -l)
# Получаем потребление памяти
MEM_USAGE=$(awk '/VmRSS/ {print $2}' /proc/$PID/status)
# Получаем путь до исполняемого файла
EXEC_PATH=$(readlink /proc/$PID/exe)
# Формируем JSON-объект с собранной информацией
json='{"process_info": {'
json+="\"fd_count\": \"$FD_COUNT\", "
json+="\"memory_usage\": \"$MEM_USAGE\", "
json+="\"executable_path\": \"$EXEC_PATH\""
json+='}}'
echo $json > proc.json
Делаем файл исполняемым
chmod +x collecting_information_about_the_current_process.shЗапускаем скрипт
./collecting_information_about_the_current_process.shТеперь выводим информацию из файла на экран
cat proc.json
Сбор информации о текущей системе
Для сбора создадим скрипт
nano collecting_information_about_the_current_system.sh
#!/bin/bash
# Получение информации о процессоре
CPU_INFO=$(lscpu | awk -F':' '{print "\"" $1 "\": \"" $2 "\","}')
CPU_INFO=${CPU_INFO%?} # Удаление последней запятой
# Получение информации о памяти
MEM_INFO=$(free -h | awk 'NR==2{print "\"total_memory\": \""$2"\", \"used_memory\": \""$3"\", \"free_memory\": \""$4"\""}')
# Получение информации о дисковом пространстве
DISK_INFO=$(df -h --output=size,used,avail,fstype | awk 'NR>1{print "\"filesystem\": \""$4"\", \"total_size\": \""$1"\", \"used\": \""$2"\", \"available\": \""$3"\""}')
# Формирование JSON-объекта
echo "{ \"system_info\": { $CPU_INFO, $MEM_INFO, $DISK_INFO } }" > sys.json
Делаем файл исполняемым
chmod +x collecting_information_about_the_current_system.shЗапускаем скрипт
./collecting_information_about_the_current_system.shТеперь выводим информацию из файла на экран
cat sys.json
Запуск приложения из шага 1
В моем случае это оболочка bash Для ее запуска в докере потребуется создать Dockerfile
Обсуждение