Все мы следуем определенным процессам для достижения своих целей. Аналогично, каждая система имеет свои собственные процессы для выполнения задач.
Каждая программа или команда, выполняемая в системе Linux, называется процессом.
В этом учебнике мы рассмотрим процессы и то, как мы можем управлять ими в Linux.
Теоретически процесс называется выполняемой программой. По сути, это задача, над которой в данный момент работает система.
Каждое ваше действие в системе приводит к появлению нового процесса. Например, открытие браузера инициирует процесс.
Проще говоря, процесс - это экземпляр программы. Действие пользователя преобразуется в команду, и при выполнении команды создается новый процесс.
Процессы работают в соответствии с иерархией ”родитель-ребенок”. Как следует из названия иерархии, процесс, инициированный командой/программой, называется родительским процессом, а процесс, созданный родительским процессом, называется дочерним процессом.
Типы процессов в Linux
В дистрибутивах Linux процессы делятся на 2 типа:
Процессы переднего планаПроцессы заднего планаПроцессы переднего плана
Процесс, который требует, чтобы пользователь запустил его с помощью команды терминала или программы, называется фоновым процессом. Это означает, что процессы переднего плана требуют входного сигнала от пользователя. Поэтому каждый процесс переднего плана запускается вручную.
Если процесс запущен на переднем плане, другие процессы должны дождаться завершения текущего процесса.
Лучший пример для демонстрации этого - команда sleep. Команда sleep не позволяет пользователю взаимодействовать с терминалом, пока не пройдет заданное количество секунд.
sleep 10
Команда терминала для засыпания на 10 секунд
sleep команда терминала, работающая на переднем плане и блокирующая ввод пользователя
Мы должны подождать 10 секунд, чтобы получить доступ к терминалу для выполнения другой команды.
Фоновые процессы
Процесс, который запускается независимо от ввода данных пользователем, называется фоновым процессом. В отличие от процессов переднего плана, в фоновом процессе можно запускать несколько процессов одновременно.
Чтобы запустить процесс в фоновом режиме, поставьте амперсанд (&) в конце команды, которую вы используете для запуска процесса.
Вот небольшой пример, демонстрирующий это:
Выполним команду sleep в фоновом процессе. Она будет работать в фоновом режиме и вернет нам терминал для выполнения других команд.
Пример команды терминала для фонового процесса
sleep 10 &
Команда терминала для сна в течение 10 секунд в фоновом режиме.
Теперь мы видим, что приведенная выше команда выполняется в фоновом режиме. Она создала процесс с PID ( 19003 ). Поэтому мы можем одновременно запустить другую команду (команду pwd).
Как изменить процесс на переднем плане на процесс в фоновом режиме
Если мы запустили процесс на переднем плане и хотим перевести его в фоновый режим, мы можем сделать это с помощью команды bg. Давайте посмотрим, как изменить процесс на переднем плане на фоновый.
Если процесс запущен, нажмите клавишу CTRL+Z. Эта команда приостановит текущий процесс.
Выdод процесса на передний план
Затем выполните команду bg. Она принимает в качестве аргумента идентификатор процесса и переводит его в фоновый режим. Если аргумент пуст, то в фоновый режим будет переведен текущий приостановленный процесс.
bg <process_id>
Команда для перевода процесса в фоновый режим
bg
Команда для перевода последнего процесса в фоновый режим
Выход процесса переднего плана в фоновый процесс
Мы видим, как приостановленная команда ( sudo apt update) возобновляется в фоновом режиме.
Прежде чем мы рассмотрим, как это сделать, вы должны знать, зачем вам может понадобиться список процессов. Вот несколько причин:
Чтобы знать, какой процесс потребляет больше времени.Чтобы знать, какой процесс занимает больше памяти и процессора.Чтобы знать команду запуска для запущенного процесса.
Чтобы увидеть процессы, запущенные в данный момент, мы можем использовать команду ps (Process Status):
ps
Команда терминала для вывода списка запущенных процессов
Команда ps, показывающая список запущенных процессов
Чтобы вывести список всех процессов каждого вошедшего в систему пользователя, мы можем использовать команду w. Эта команда представляет собой комбинацию команд who, uptime и ps -a в Linux.
w
Команда терминала для вывода списка процессов всех вошедших в систему пользователейКоманда w, отображающая список процессов всех пользователейКак составить список процессов в древовидном представлении
Когда запускается программа/команда, она инициирует главный процесс, называемый родительским процессом. Родительский процесс может зависеть от другой команды/программы, которая создаст дочерний процесс.
Вот пример скриншота.
Дочерние процессы родительского процесса (firefox)
На скриншоте выше Firefox является родительским процессом, а остальные процессы - его дочерними процессами.
Давайте рассмотрим, как вывести список процессов в древовидной структуре.
pstree - это команда Linux для вывода списка текущих запущенных процессов всех пользователей в виде древовидной структуры. Она используется как более наглядная альтернатива команде ps.
pstree
Команда терминала для составления списка процессов в виде дереваКоманда pstree перечисляет процессы в древовидном представлении
Как мы видим, запущенные процессы представлены в виде дерева. Это может быть полезно для визуализации процессов.
Добавление флага -p к команде отобразит каждую ветвь с ее идентификатором процесса.
pstree -p
Команда терминала для отображения дочерних процессов родительского процесса в древовидной структуреКоманда терминала, отображающая список процессов в древовидном виде с PID
Чтобы перечислить дочерние процессы определенного процесса, передайте идентификатор процесса в качестве аргумента команде pstree.
pstree 3149
Команда терминала для вывода списка процессов с идентификатором процесса 3149
Перечисление процессов в древовидном представлении для конкретного процесса
Ранее я упоминал, что команда pstree выводит список процессов всех пользователей. Передача имени пользователя вместе с командой pstree перечисляет только процессы, запущенные пользователем.
pstree root
Перечисление процессов в древовидном представлении для определенного пользователя
На скриншоте выше показаны процессы, запущенные пользователем root.
Как посмотреть процессы конкретной программы
Многие разработчики могли столкнуться со следующим сценарием:
Работая над проектами веб-разработки, мы используем такие браузеры, как Chrome, Firefox и другие, чтобы проверить результат в разных браузерах.
Некоторые разработчики продолжают открывать вкладки и никогда не закрывают открытые. Из-за большой нагрузки (если открыто 150+ вкладок) браузеры иногда не отвечают 😣, что приводит к зависанию системы. Хуже всего может быть то, что мы не сможем закрыть браузер 😂.
В отличие от Windows, в Linux у нас нет диспетчера задач, чтобы закрыть браузер.
Эта проблема может быть легко решена и в Linux. Давайте посмотрим, как эксперт Linux справляется с этим сценарием.
Мы знаем, что каждая программа (включая браузер) запускается как процесс. Значит, нужно просто найти идентификатор процесса и убить его.
Давайте посмотрим, как найти идентификатор процесса нужной вам команды/программы.
В моей системе запущен Chrome, теперь мы можем получить PID Chrome, выполнив следующую команду:
pidof chrome
Команда терминала для поиска идентификатора процесса
Команда терминала для поиска идентификатора процесса chromeКак убить процесс
В Linux существует команда kill, которая используется для уничтожения любого процесса путем передачи PID (Process id) или имени процесса.
Вот синтаксис команды kill:
kill <pid/processname>
Синтаксис команды kill
Давайте сохраним PID Chrome и убьем его с помощью команды kill:
a=$(pidof chrome)
kill $a
Команда для уничтожения процесса
Команда терминала для уничтожения процесса
Приведенная выше команда уничтожит веб-браузер Chrome.
Для вида перечислить все процессы
Мы можем увидеть все процессы Linux с помощью команды top. Она показывает обновления каждого процесса в реальном времени для всех пользователей.
top
Команда терминала для вывода списка всех процессов в режиме реального времениКоманда терминала, отображающая все процессы в режиме реального времени
Давайте разберемся в заголовке, чтобы понять основные данные.
PID представляет уникальный идентификатор процесса.USER представляет имя пользователя владельца задачи.PR представляет приоритет процесса. Если число меньше, то приоритет выше.NI представляет собой приятное значение задачи. Отрицательное значение Nice Value означает более высокий приоритет, а положительное Nice Value означает более низкий приоритет.VIRT представляет общую виртуальную память, используемую задачей.RES представляет RAM Usage процесса в килобайтах.SHR представляет Shared Memory Size ( Kb ), используемый процессом.S представляет статус процесса:- D: Непрерывный сон- R: Работает- S: Спящий- T: Отслеживается (остановлен)- Z: ZombieCPU представляет использование процессора.MEM представляет использование памяти задачи.TIME представляет процессорное время.COMMAND представляет команду, которая использовалась для запуска процесса.
Для отображения определенных пользовательских процессов необходимо использовать флаг -u:
top -u <username>
Синтаксис команды терминала для списка процессов конкретного пользователя
Чтобы просмотреть процессы, запущенные пользователем gogosoon, выполните следующую команду:
top -u gogosoon
Команда терминала для списка процессов, запущенных пользователем gogosoonВывод терминала всех процессов, запущенных пользователем gogosoon
Вас может смутить вывод командной строки 😆. Будет трудновато отлаживать процессы в реальном времени.
Здесь на помощь приходит удобный инструмент GUI для работы с процессами в Linux. Но мы должны установить его вручную. Это будет работать как диспетчер задач в Windows.
sudo apt install gnome-system-monitor
Команда терминала для установки приложения для мониторинга системы
После установки просто введите название программы в терминале:
gnome-system-monitor
Команда для открытия списка процессов в графическом интерфейсе
Это откроет все процессы в новом окне с достойным графическим интерфейсом:
Gnome-System-Monitor
Когда мы щелкаем правой кнопкой мыши на любом процессе, отображаются такие действия, как kill, stop, end и так далее.
На вкладке Ресурсы отображаются следующие утилиты:
История процессора
История памяти и свопа
История сети
Эти графики будут полезны для определения нагрузки в вашей системе.
Заключение
В этой статье вы познакомились с основами процессов в Linux. Надеюсь, теперь вы лучше понимаете, как они работают. Я рекомендую вам попробовать эти команды в вашей системе.
Чтобы узнать больше о Linux, подпишитесь на мою рассылку на моем сайте и следите за мной в социальных сетях.