Загрузка данных


####################################
# ПРАКТИЧЕСКАЯ РАБОТА 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