Загрузка данных
####################################
# ПРАКТИЧЕСКАЯ РАБОТА 13. ПРОЦЕССЫ
####################################
##########
# ЗАДАНИЕ 1
##########
# Все потоки процесса syslog-ng через ps и htop
# 1.1 вывести все потоки (LWP) процесса syslog-ng
ps -C syslog-ng -L -o pid,tid,ppid,psr,stat,cmd
# 1.2 найти PID syslog-ng (если нужно отдельно)
ps aux | grep syslog-ng | grep -v grep
# 1.3 (вручную) запустить htop в отдельном терминале и отфильтровать/найти syslog-ng
# команда для запуска:
htop
##########
# ЗАДАНИЕ 2
##########
# Топ‑15 процессов по памяти: PID, %MEM, EUID, RUID, SUID, Command
# 2.1 через ps
ps -eo pid,pmem,euid,ruid,suid,cmd --sort=-pmem | head -n 16
# 2.2 (вручную) через htop
# команда для запуска:
htop
# в htop отсортировать по памяти (обычно F6 / SortBy -> MEM% или клавиша M)
##########
# ЗАДАНИЕ 3
##########
# Работа с nano, nice/renice и сигналами
# 3.1 создать файл test_nano и открыть его nano (обычный приоритет)
cd ~
touch test_nano
nano test_nano
# (в этом месте nano блокирует терминал, поэтому далее команды выполняй ПОСЛЕ выхода из nano для первой части
# или используй запуск в фоне)
# вариант с фоном, как требует задание:
# открыть test_nano nano в фоновом режиме
nano test_nano &
# запомни PID nano (будет показан оболочкой), либо найди:
ps aux | grep nano | grep test_nano
# 3.2 найти процесс nano и повысить его приоритет (уменьшить nice) до 15
# (nice = 15 означает более низкий приоритет, но в тексте так; если хотят «повысить» производительность — нужно уменьшать nice)
# допустим PID = 1234, тогда:
renice 15 -p 1234
# 3.3 вернуть из фона процесс nano и закрыть его
fg
# внутри nano: Ctrl+X, затем сохранить/не сохранять по заданию
# 3.4 открыть test_nano с приоритетом (nice) 25 при создании
cd ~
nice -n 25 nano test_nano &
# найти pid nano
ps aux | grep nano | grep test_nano
# 3.5 завершить процесс nano сигналом SIGKILL
# допустим PID = 2345:
kill -9 2345
# проверить, что nano завершился
ps aux | grep nano | grep -v grep
##########
# ЗАДАНИЕ 4
##########
# Скрипты нагрузки на CPU, taskset и изменение приоритета
# 4.1 создать каталог scripts
cd ~
mkdir -p ~/scripts
# 4.2 создать resource-demanding1.sh
cat > ~/scripts/resource-demanding1.sh << 'EOT'
#!/bin/bash
while [ 1 == 1 ]; do
for x in {1..60}; do
let "res=2**x"
done
done
EOT
# 4.3 создать resource-demanding2.sh
cat > ~/scripts/resource-demanding2.sh << 'EOT'
#!/bin/bash
while [ 1 == 1 ]; do
for x in {1..60}; do
let "res=2**x"
done
done
EOT
# 4.4 сделать файлы исполнимыми
chmod u+x ~/scripts/resource-demanding1.sh
chmod u+x ~/scripts/resource-demanding2.sh
# 4.5 (вручную) в другом терминале запустить htop и отсортировать по CPU
htop
# 4.6 запустить оба скрипта на первом ядре CPU (ядро 0) в фоновом режиме
cd ~/scripts
taskset -c 0 ./resource-demanding1.sh &
taskset -c 0 ./resource-demanding2.sh &
# 4.7 посмотреть их PID
ps aux | grep resource-demanding | grep -v grep
# допустим:
# PID1 = PID первого скрипта
# PID2 = PID второго скрипта
# 4.8 понизить приоритет первого процесса (увеличить nice) последовательно:
# до 25
renice 25 -p PID1
# до 30
renice 30 -p PID1
# до 35
renice 35 -p PID1
# до 39
renice 39 -p PID1
# наблюдать изменения использования CPU в htop (вручную)
# 4.9 повысить приоритет первого процесса (уменьшать nice) последовательно:
renice 15 -p PID1
renice 10 -p PID1
renice 5 -p PID1
renice 0 -p PID1
# снова смотреть в htop, как меняется использование CPU
# 4.10 задать приоритет второму процессу так, чтобы он потреблял ≥75% CPU первого ядра,
# не меняя приоритет первого процесса (оставить PID1 с nice=0)
# например, сильно ухудшим nice первого (если надо) и улучшим второго:
renice 0 -p PID1
renice -5 -p PID2
# (подбирай nice для PID2 по ситуации, пока в htop он не станет ≥75%)
# 4.11 корректно завершить процессы:
# отправить первому SIGINT (Ctrl+C программно)
kill -2 PID1
# отправить второму SIGKILL
kill -9 PID2
# убедиться, что процессов больше нет
ps aux | grep resource-demanding | grep -v grep
##########
# ЗАДАНИЕ 5
##########
# Лимит на количество потоков (nproc)
# 5.1 посмотреть текущее количество процессов/потоков пользователя
ps -u "$USER" h | wc -l
# допустим, это число N. Лимит зададим как N+3
# пример: если получили 40, задаём 43 — подставь своё значение вместо 43
ulimit -u 43
# 5.2 запустить несколько новых bash, чтобы приблизиться к лимиту
bash &
bash &
bash &
bash &
# 5.3 попытаться запустить ещё один bash до ошибки «Resource temporarily unavailable»
bash &
# 5.4 закрыть текущий терминал/оболочку после ошибки
exit
##########
# ЗАДАНИЕ 6
##########
# Информация из /proc
# 6.1 о процессе syslog-ng
# найти PID syslog-ng
ps aux | grep syslog-ng | grep -v grep
# допустим PID = P_SYSLOG
# строка запуска процесса
cat /proc/P_SYSLOG/cmdline
# окружение процесса
cat /proc/P_SYSLOG/environ
# сведения о вводе/выводе (прочитанные/записанные данные)
cat /proc/P_SYSLOG/io
# лимиты процесса
cat /proc/P_SYSLOG/limits
# статус процесса
cat /proc/P_SYSLOG/status
# 6.2 об ОС в целом
# параметры, переданные ядру при загрузке
cat /proc/cmdline
# сведения обо всех установленных процессорах
cat /proc/cpuinfo
# информация о состоянии памяти
cat /proc/meminfo
# перечень устройств в системе
cat /proc/devices
# перечень файловых систем, поддерживаемых ядром
cat /proc/filesystems
# перечень смонтированных файловых систем
cat /proc/mounts
# либо
cat /proc/self/mounts
# список разделов подкачки
cat /proc/swaps