Введение
В этой лабораторной работе вы изучите основные навыки управления и мониторинга процессов в операционной системе Linux. Вы узнаете, как взаимодействовать с процессами, запущенными как на переднем плане, так и в фоновом режиме, что даст вам полный контроль над средой командной строки и системными ресурсами. Этот практический опыт является фундаментальным для любого специалиста, работающего с Linux — от системных администраторов до разработчиков.
Вы начнете с запуска фоновой задачи с помощью оператора & и проверки ее статуса командой jobs. Затем вы научитесь инспектировать запущенные процессы через ps, отслеживать активность системы в реальном времени с помощью top и управлять задачами, используя fg, bg и сочетание клавиш Ctrl-Z. В завершение работы вы узнаете, как изменять приоритет процесса с помощью renice и принудительно завершать его командой kill, охватив таким образом весь жизненный цикл управления процессами.
Запуск и просмотр фонового процесса с помощью & и jobs
На этом этапе вы научитесь запускать команды в фоновом режиме и проверять их состояние. Обычно в оболочке Linux после ввода команды вы ждете ее завершения, прежде чем снова появится приглашение к вводу. Это называется выполнением процесса на переднем плане (foreground). Однако для длительных задач удобнее использовать фоновый режим (background), чтобы терминал оставался свободным для других команд.
Чтобы запустить команду в фоне, достаточно добавить символ амперсанда (&) в конце строки. Попробуем сделать это на примере команды sleep, которая просто приостанавливает работу на заданное время.
Выполните следующую команду, чтобы запустить sleep на 300 секунд в фоновом режиме. Это позволит нам работать с этим процессом на следующих этапах.
sleep 300 &
После нажатия Enter вы увидите вывод, похожий на приведенный ниже, и сразу же вернетесь к приглашению командной строки.
[1] 12345
Оболочка запустила sleep 300 как фоновую задачу. В выводе содержатся два важных идентификатора:
[1]: Это ID задачи (job ID). Оболочка присваивает уникальный номер каждой фоновой задаче в текущей сессии.12345: Это ID процесса (PID). Операционная система присваивает уникальный номер каждому запущенному процессу в системе. Ваш PID будет отличаться от примера.
Теперь, когда процесс запущен, как проверить его статус? Для этого используется команда jobs, которая выводит список всех фоновых задач текущей сессии терминала.
Введите команду jobs в терминале:
jobs
Вы увидите информацию о запущенной команде sleep, ее ID и текущем состоянии.
[1]+ Running sleep 300 &
Вы успешно запустили процесс в фоновом режиме и научились проверять его статус. Это базовый навык для управления длительными операциями в Linux. Далее мы разберем, как взаимодействовать с этой фоновой задачей.
Инспекция запущенных процессов с помощью ps
Ранее вы использовали команду jobs, чтобы увидеть фоновые процессы в текущей оболочке. Однако jobs ограничивается только вашей текущей сессией. Чтобы получить полную картину всех процессов в системе, нужен более мощный инструмент: ps (process status). Команда ps делает «снимок» состояния процессов в момент ее запуска.
Начнем с запуска ps без параметров. Эта команда покажет процессы, принадлежащие текущему пользователю и привязанные к данному терминалу.
ps
Вывод будет кратким: скорее всего, там окажется только сама оболочка (zsh) и команда ps. Идентификаторы PID в вашей системе будут другими.
PID TTY TIME CMD
23882 pts/0 00:00:00 zsh
23953 pts/0 00:00:00 ps
Чтобы увидеть абсолютно все процессы в системе, а не только те, что запущены в вашем терминале, используются специальные флаги. Один из самых популярных наборов — ps aux.
a: показывает процессы всех пользователей.u: выводит подробную информацию в удобном для пользователя формате (владелец, % CPU, % памяти и т.д.).x: включает процессы, не привязанные к терминалу.
Длинный список процессов неудобен, если вы ищете что-то конкретное. Мы можем скомбинировать ps с командой grep для фильтрации. Давайте найдем тот самый процесс sleep, который мы запустили ранее.
ps aux | grep sleep
Эта команда отфильтрует вывод ps aux и оставит только строки, содержащие слово "sleep".
labex 23885 0.0 0.0 7264 868 pts/0 S 11:50 0:00 sleep 300
labex 23962 0.0 0.0 10788 2240 pts/0 S+ 11:52 0:00 grep --color=auto sleep
Скорее всего, вы увидите две строки. Первая — это ваш процесс sleep 300. Вторая — это сама команда grep sleep, которая работала в момент формирования списка. Обратите внимание, что PID для sleep 300 (в примере — 23885) совпадает с тем, что вы видели при запуске в фоне.
Другой популярный формат просмотра процессов — ps -ef.
-e: выбрать все процессы в системе.-f: полноформатный вывод, включающий важные данные, такие как ID родительского процесса (PPID).
Попробуем этот вариант, снова используя grep.
ps -ef | grep sleep
Формат вывода изменится, но информация останется схожей. Этот вид особенно полезен для понимания иерархии процессов через колонки PID и PPID.
UID PID PPID C STIME TTY TIME CMD
labex 23885 23882 0 11:50 pts/0 00:00:00 sleep 300
labex 23964 23882 0 11:53 pts/0 00:00:00 grep --color=auto sleep
Теперь вы знаете, как использовать ps для получения моментального снимка системных процессов. Сочетая ее с grep, вы сможете быстро находить и анализировать нужные программы.
Мониторинг системных ресурсов с помощью top
На этом этапе вы познакомитесь с top — мощным инструментом для мониторинга системы в реальном времени. Если ps дает статичную картинку, то top предоставляет динамическое, постоянно обновляемое представление активности системы. Это незаменимо для поиска процессов, которые потребляют слишком много ресурсов прямо сейчас.
Для запуска просто введите top в терминале и нажмите Enter.
top
Интерфейс top займет все окно терминала. Данные будут обновляться каждые несколько секунд.
top - 12:05:15 up 15 min, 1 user, load average: 0.00, 0.01, 0.00
Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1987.2 total, 985.4 free, 501.8 used, 500.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1325.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 167900 12936 8488 S 0.0 0.6 0:01.15 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
...
Интерфейс top разделен на две основные части:
- Область сводки сверху показывает общую статистику системы: время работы, количество задач, загрузку процессора (
%Cpu(s)) и использование памяти (MiB Mem). - Список процессов снизу отображает отдельные программы, по умолчанию отсортированные по потреблению ресурсов процессора (
%CPU).
Команда top интерактивна. Вы можете использовать горячие клавиши для изменения отображения:
- Сортировка по памяти: Нажмите
M(заглавную). Список перестроится по колонке%MEM, показывая самые «прожорливые» до памяти процессы сверху. - Сортировка по процессору: Нажмите
P(заглавную). Это вернет сортировку по умолчанию (по колонке%CPU). - Поиск процесса
sleep: Попробуйте найти запущенный ранееsleep. Скорее всего, он будет в самом низу списка, так как почти не потребляет ресурсы. Используйте клавишиСтрелка внизиСтрелка вверхдля прокрутки списка.
Когда закончите наблюдение, вы можете выйти из программы.
- Выход из
top: Нажмитеq, чтобы закрыть интерфейс и вернуться в командную строку.
Вы научились использовать top для оперативного контроля за процессами и ресурсами. Это основной инструмент системного администратора для диагностики проблем с производительностью.
Управление задачами с помощью fg, bg и Ctrl-Z
На этом этапе вы научитесь управлять состоянием запущенных задач. Вы уже знаете, как запустить задачу в фоне, но что если вы запустили долгую команду обычным способом и поняли, что вам снова нужен доступ к терминалу? Управление задачами (job control) позволяет перемещать процессы между передним и задним планом, а также приостанавливать и возобновлять их.
Вернемся к нашему процессу sleep 300. Сначала проверьте его статус командой jobs.
jobs
Вы должны увидеть, что задача sleep выполняется в фоновом режиме.
[1] + running sleep 300
Теперь переведем эту задачу на передний план. Для этого используйте команду fg (foreground), указав ID задачи с префиксом %. Так как наш ID равен 1, команда будет выглядеть так:
fg %1
Оболочка выведет название команды, и приглашение к вводу исчезнет. Терминал теперь «занят» процессом sleep 300, и вы ждете его завершения.
[1] + 394 running sleep 300
Чтобы вернуть управление терминалом, не убивая процесс, его можно остановить (приостановить). Нажмите комбинацию клавиш Ctrl-Z.
Это действие посылает процессу специальный сигнал (SIGTSTP), который приостанавливает его выполнение. Процесс не завершается, он просто «замирает». Вы увидите подтверждающее сообщение, и командная строка снова станет доступной.
[1] + 394 suspended sleep 300
Снова проверьте статус задач:
jobs
Теперь статус задачи изменился на "suspended" (приостановлена).
[1] + suspended sleep 300
Приостановленную задачу можно возобновить. Это можно сделать либо на переднем плане (fg), либо в фоне (bg). Давайте возобновим ее работу в фоновом режиме.
bg %1
Оболочка подтвердит, что задача снова запущена в фоне.
[1] + 394 continued sleep 300
Проверьте статус в последний раз через jobs, чтобы убедиться, что процесс снова в состоянии "Running". Вы успешно перевели процесс из фона вперед, остановили его и вернули обратно в фоновый режим.
Изменение приоритета процесса с помощью renice
На этом этапе вы узнаете, как влиять на приоритет планирования запущенного процесса. В Linux «вежливость» (niceness) процесса определяет, сколько процессорного времени он получает относительно других задач. Значение nice варьируется от -20 (наивысший приоритет) до +19 (наинизший приоритет). По умолчанию большинство процессов запускаются со значением 0. Чем выше значение nice, тем «вежливее» процесс по отношению к другим, так как он охотнее уступает ресурсы процессора.
Мы изменим приоритет процесса sleep, с которым работали. Для этого сначала нужно узнать его ID процесса (PID). Найдем его с помощью ps и grep.
ps aux | grep sleep
Найдите строку с sleep 300 (не саму команду grep) и запомните PID из второй колонки.
labex 23885 0.0 0.0 7264 868 pts/0 S 11:50 0:00 sleep 300
labex 24101 0.0 0.0 10788 2240 pts/0 S+ 12:15 0:00 grep --color=auto sleep
В этом примере PID — 23885. В следующих командах обязательно используйте PID из вашего собственного вывода.
Теперь проверим текущее значение nice (NI) этого процесса. Команда ps с флагом -o позволяет настроить отображаемые колонки.
ps -o pid,ni,cmd -p <YOUR_PID>
Замените <YOUR_PID> на реальный PID вашего процесса. Например: ps -o pid,ni,cmd -p 23885.
PID NI CMD
23885 5 sleep 300
Как и ожидалось, стандартное значение nice (NI) равно 5 (или 0, в зависимости от настроек системы).
Теперь изменим это значение с помощью команды renice. Мы установим значение 10, что сделает процесс менее приоритетным. Обычные пользователи могут только увеличивать значение nice для своих процессов (понижая их приоритет).
renice -n 10 -p <YOUR_PID>
Снова замените <YOUR_PID> на ваш PID. Команда сообщит о старом и новом приоритете.
23885 (process ID) old priority 5, new priority 10
Наконец, убедитесь, что изменения вступили в силу, снова запустив ps:
ps -o pid,ni,cmd -p <YOUR_PID>
В выводе должно отобразиться новое значение nice.
PID NI CMD
23885 10 sleep 300
Вы успешно изменили приоритет работающего процесса. Это полезный прием для того, чтобы длительные и некритичные фоновые задачи не мешали важной работе на переднем плане.
Завершение процесса с помощью kill
На заключительном этапе вы научитесь завершать процессы. Хотя многие программы закрываются сами, часто возникает необходимость вручную остановить задачу, которая больше не нужна, работает некорректно или была запущена временно, как наш sleep. Основной инструмент для этого — команда kill.
Команда kill отправляет сигнал указанному процессу. По умолчанию отправляется сигнал SIGTERM (завершение), который вежливо просит программу закрыться, позволяя ей сохранить данные и корректно завершить работу.
Вы можете указать процесс через его PID или, если это фоновая задача текущей оболочки, через ID задачи. Использовать ID задачи часто удобнее.
Сначала убедимся, что наш sleep все еще запущен.
jobs
Вы должны увидеть процесс в списке.
[1]+ Running sleep 300 &
Теперь используйте команду kill с ID задачи (%1), чтобы завершить ее.
kill %1
После выполнения команды оболочка выведет сообщение о том, что задача была завершена. Это сообщение может появиться сразу или после того, как вы еще раз нажмете Enter.
[1]+ Terminated sleep 300
Проверим, что процесс действительно исчез. Снова введите jobs.
jobs
Команда не должна ничего вывести, так как активных задач больше нет. Также можно перепроверить через ps.
ps aux | grep sleep
Единственное, что вы можете увидеть — это саму команду grep. Оригинальный процесс sleep 300 больше не существует.
В случаях, когда процесс завис и не реагирует на обычный SIGTERM, можно отправить более жесткий сигнал — SIGKILL (номер сигнала 9), который немедленно обрывает работу процесса без возможности очистки данных. Команда выглядела бы так: kill -9 %1. Это следует использовать только в крайнем случае.
Поздравляем! Вы на практике изучили полный жизненный цикл управления процессами в Linux: от запуска в фоне и инспекции через ps и top до управления состоянием, изменения приоритета и финального завершения.
Резюме
В этой лабораторной работе вы освоили фундаментальные навыки управления и мониторинга процессов в среде Linux. Вы начали с запуска процесса в фоновом режиме с помощью оператора & и научились проверять его статус командой jobs. Затем вы изучили способы инспекции всех запущенных процессов через ps для получения таких данных, как PID, и использовали top для динамического наблюдения за ресурсами системы.
Кроме того, вы попрактиковались в управлении задачами: приостанавливали процессы с помощью Ctrl-Z, переводили их в фоновый режим через bg и возвращали на передний план командой fg. Вы также узнали, как корректировать приоритет планирования процессов с помощью renice и как корректно завершать работу программ командой kill.



