Что такое процесс в Linux?
Термин « процесс» часто неизвестен никому без образования в области компьютерных наук. Однако он часто используется при обсуждении программирования для Linux, и процессы необходимы для работы системного администрирования.
В Linux термин « работа» также используется для обозначения очень похожей концепции. Разница небольшая, но важная, а управление заданиями – полезный инструмент при работе в многозадачной среде. Вы можете использовать ряд инструментов и встроенных команд для выполнения заданий.
Что такое процесс?
На самом простом уровне вы можете думать о процессе как о эквиваленте программы, которую вы запускаете. Это может быть полноценное приложение с графическим интерфейсом пользователя, такое как ваш веб-браузер. Это может быть одна разовая команда, которую вы запускаете в командной строке, например ls . Вообще говоря, все, что происходит на вашем компьютере, зависит от процесса, в его основе.
В действительности одно приложение может использовать множество процессов для одновременного выполнения отдельных задач. Вызов командной строки с использованием каналов, например:
$ grep "error" log.txt | wc -l
Выполняет два отдельных процесса, по одному для каждого сегмента трубы.
Как начинаются процессы
Процессы создаются либо явно вами, пользователем, либо автоматически самим вашим компьютером. Фактически, у вас могут быть уже запущены сотни процессов, как только вы загрузились.
Процессы могут порождать другие процессы, и init, первый процесс, который запускается во многих традиционных системах Linux, в конечном итоге отвечает за запуск каждого запущенного процесса.
Как заканчиваются процессы
Многие процессы представляют собой кратковременные команды, которые выполняют задачу, а затем останавливаются. Если ввести ls в терминал, процесс будет запущен, выполнен и остановлен за доли секунды.
Некоторые процессы, например демоны , работают постоянно. Например, процесс cron периодически выполняет другие команды во время работы его главного компьютера.
Идентификация процесса
Операционная система (ОС) присваивает каждому процессу уникальный идентификатор. Он известен как PID или идентификатор процесса. Это значение обычно состоит из 1-5 цифр, и будущие процессы могут повторно использовать PID предыдущего процесса, который был полностью очищен.
PID используются самой ОС по-разному. Хорошим примером является каталог / proc, в котором хранится информация о запущенных в данный момент процессах.
Что такое работа?
В терминологии Linux задание – это программа, управляемая оболочкой. Обычно он состоит из одного процесса, но может использовать несколько. Когда вы вводите команду в своем терминале, запускается процесс для ее выполнения и создается задание, помогающее управлять командой во время ее выполнения.
Управление вакансиями
Если вы выполняете задание на переднем плане, вы можете прервать его, нажав Control + C (^ C). Обычно это приводит к завершению процесса и возврату терминала к приглашению.
$ sleep 100
^C
$
Кроме того, нажатие Control + Z (^ Z) остановит выполнение задания, но не приведет к его завершению. Вы можете думать об этом как о паузе.
$ sleep 100
^Z
[1]+ Stopped sleep 100
$
Обратите внимание, что оболочка сообщает вам номер задания в квадратных скобках, когда вы его останавливаете. Это можно использовать с другими командами для управления заданием. Например, вы можете перезапустить задание, переместив его на передний план с помощью fg :
$ fg %1
sleep 100
Вы можете использовать аналогичную команду для перезапуска задания в фоновом режиме:
$ bg %1
[1]+ sleep 100 &
$
Это вернет управление подсказке, так что вы сможете продолжить работу во время выполнения задания. Если вы хотите, чтобы задание выполнялось в фоновом режиме, как только вы его запустите, добавьте & в конец команды:
$ sleep 100 &
[1] 61087
$
В этом случае оболочка печатает номер задания в скобках, а затем PID.
Общие инструменты для опроса процессов и заданий
Процессы мониторинга
Одна из самых полезных команд для получения информации о процессах – это top . Программа показывает в реальном времени интерактивный просмотр запущенных процессов. Это эквивалент командной строки графических программ, таких как системный монитор GNOME или диспетчер задач Windows.
Вы можете запустить программу top с помощью простой команды top :

В области заголовка отображается загрузка ЦП и использование памяти. Ниже вверху показана таблица, содержащая по одному процессу в строке. Подробная информация включает PID, сколько доступной мощности процессора использует процесс и общее время процессора, которое он потребил. Информация обновляется автоматически каждые три секунды по умолчанию.
Существует множество опций и интерактивных команд, которые можно использовать для изменения поведения top. Используйте команду man top, чтобы узнать больше:

Получение снимка активных процессов
Сокращенно от статуса процесса , команда ps выводит список процессов. Различные параметры позволяют выполнять различную фильтрацию и корректировку отображаемых сведений. По умолчанию ps показывает процессы, которые подключены к терминалу и были запущены текущим пользователем. Другими словами, в основном это команды, которые вы вводите в командной строке.
Если предыдущая задача еще не завершена, результат может выглядеть примерно так:
$ ps
PID TTY TIME CMD
35564 ttys000 0:00.00 sleep 100
73998 ttys000 0:00.43 -bash
Как и в случае с top, ps имеет множество опций для управления его поведением, и их можно обнаружить с помощью man ps :

Двумя наиболее полезными, которые часто комбинируются, являются -e и -f . Они показывают процессы, принадлежащие всем пользователям, и дополнительные столбцы соответственно. Например:
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2020 ? 00:11:22 /sbin/init
root 2 0 0 2020 ? 00:00:00 [kthreadd]
...
Список фоновых заданий
Команда jobs перечисляет фоновые задания в текущей оболочке. Чтобы продемонстрировать его использование, запустите длительное задание в фоновом режиме:
$ du -skh ~ >/tmp/du.txt 2>/dev/null &
[1] 61167
Эта команда вычисляет общее дисковое пространство, используемое вашим домашним каталогом, перенаправляя его вывод во временный файл.
$ jobs
[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &
В конце концов, когда задание завершится, в вашем терминале появится строка, похожая на:
[1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null
Отправка сигналов для завершения процессов
Если вы обнаружили некорректный процесс, возможно, вам придется его убить. Хотя это звучит резко, команда kill – обычная часть инструментария системного администратора. Он может отправлять любой из нескольких сигналов, которые являются стандартными уведомлениями для управления поведением процесса. Некоторые общие сигналы для отправки – это SIGINT, SIGTSTP, SIGTERM и SIGKILL.
SIGINT эквивалентен нажатию ^ C. SIGTSTP эквивалентен нажатию ^ Z. SIGTERM и SIGKILL – оба средства остановки процесса. Первый отправляет запрос процессу, давая ему возможность корректно завершить работу. Последний является более экстремальным методом принудительного завершения процесса, и его следует использовать в крайнем случае.
Команда kill также может работать с заданиями. Например:
$ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated: 15 sleep 100
Работа с процессами и заданиями в Linux
Процессы и задания – это непростые понятия, особенно их различие. Однако это один из первых шагов к пониманию системного администрирования под Linux. Задания – это практичное средство одновременного выполнения разных команд из оболочки.
Процессы – это понятие нижнего уровня, которым также можно управлять, и они лежат в основе каждой программы, выполняемой на компьютере.