Управляем процессами в Ubuntu

Стандартный

dm@dm-desktop: ~_476

В данной статье речь пойдет об управлении процессами в Терминале. Это будет полезно в первую очередь тем, кто обслуживает серверы, системным администраторам, а так же для пользователей, которые хотят саморазвиваться и узнавать все больше и больше о Linux.

Для мониторинга процессов используется утилита ps. Чтобы отобразить все запущенные процессы нужно выполнить команду:

ps aux

Вывод может очень большой, но примерно вы увидите следующее:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 34096 3536 ? Ss 14:16 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:16 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/0:0H]
root 7 0.1 0.0 0 0 ? S 14:16 0:03 [rcu_sched]
root 15 0.0 0.0 0 0 ? S 14:16 0:00 [rcuos/7]
root 16 0.0 0.0 0 0 ? S 14:16 0:00 [rcu_bh]
root 25 0.0 0.0 0 0 ? S 14:16 0:00 [migration/0]
root 26 0.0 0.0 0 0 ? S 14:16 0:00 [watchdog/0]
root 27 0.0 0.0 0 0 ? S 14:16 0:00 [watchdog/1]
root 28 0.0 0.0 0 0 ? S 14:16 0:00 [migration/1]
root 29 0.0 0.0 0 0 ? S 14:16 0:00 [ksoftirqd/1]
root 31 0.0 0.0 0 0 ? S< 14:16 0:00 [kworker/1:0H]

Для более удобного просмотра можно выполнить команду:

ps aux | less

Какую информацию можно увидеть по каждому процессу?

USER – от какого пользователя запущен процесс.
PID – идентификатор процесса.
PPID – идентификатор родительского процесса.
%CPU – доля времени процессора (в %), которое выделено данному процессу.
%MEM – использование оперативной памяти в процентах.
VSZ – виртуальный размер процесса.
RSS — размер резидентного набора (количество 1K-страниц в памяти).
TTY – терминал, с которого был запущен процесс.
STAT– статус процесса. В данном параметре могут быть следующие значения:

R – активный (выполняется);
D — процесс, который находится в состоянии подкачки на диске;
T — остановленный процесс;
S – спит;
Z – зомби-процесс;
< – повышенный приоритет;
N – низкий приоритет;
L — процесс имеет страницы, которые заблокированы в памяти;
+ – Находится в интерактивном режиме.

START – время запуска процесса.
TIME – сколько времени CPU занял данный процесс.
CMD или COMMAND — командная строка запуска программы, выполняемой данным процессом.

Чтобы отобразить дерево, показывающее иерархические отношения, выполним следующую команду:



ps axjf

Чтобы отфильтровать поиск нужного процесса, можно использовать следующую команду:

ps aux | grep handbrake

В результате мы видим, что есть работающий процесс handbrake, который запущен от пользователя dm

dm 12849 0.0 0.0 17176 944 pts/21 D+ 14:58 0:00 grep –color=auto handbrake

Далее на помощь приходит команда top. В отличии от ps, которая делает моментальный снимок процессов в текущий момент, top отображает состояние процессов и их активность “в реальном режиме времени”. В самой верхней части вывода можно увидеть фактическое время, время, которое прошло с момента включения системы, количество пользователей, количество запущенных процессов, а так же число процессов, которые находятся в различных состояниях, информация про использование CPU, памяти и свопа. Внизу имеется таблица, которая отображает все процессы.

Вся информация о процессах обновляется каждые 5 секунд. Вы можете отсортировать все процессы по PID, по используемому времени CPU (по умолчанию), по использованию памяти, по времени исполнения и возрасту. Переключать режимы отображения можно с помощью следующих клавиатурных команд:

Shift+N — сортировка по PID;
Shift+A — сортировка по возрасту;
Shift+P — сортировка по использованию CPU;
Shift+M — сортировка по использованию памяти;
Shift+T — сортировка по времени выполнения.

Если нужно завершить какой-нибудь процесс, то это можно сделать с помощью клавиши K, предварительно указав PID процесса, а с помощью клавиши R можно переопределить значение nice для нужного процесса.

Что такое nice? Данные этого параметра можо увидеть в столбце NI команды top. Итак имдем далее. Приоритет для каждого процесса устанавливается в момент порождения процесса. Приоритет процесса определяется значением “nice”, которое лежит в пределах от +20 (самый наименьший приоритет, процесс выполняется в тот момент, когда ничто другое не занимает процессор), до -20 (наивысший приоритет).

Чтобы изменять приоритет нового процесса существует утилита nice. Другими словами, если нужно запустить какой-нибудь процесс/программу, то вы можете задать приоритет в системе перед запуском.

nice [- adnice] command [args]

где adnice — это значение (от –20 до +19), которое добавляется к значению nice процесса-родителя. Отрицательные значения имеет право устанавливать только суперпользователь. Если опция adnice не задана, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса. Пример использования:

nice -n 15 deluge

В данном примере мы запустим программу Deluge с приоритетом 15.

А для изменения приоритета уже запущенных процессов существует утилита renice. Для данной утилиты нужно указывать не имя процесса, а его PID. Вы можете изменять приоритет только своих процессов, а от имени суперпользователя сможете как понижать, так и повышать соверешенно любой прцесс в системе. Пример использования:

sudo renice -1 24891

В данном примере мы повысили приоритет процесса с PID 24891 на 1 от имени пользователя root.

Более подробно о всех параметрах утилит вы сможете узнать, выполннив команды:

man nice
man renice

Если запустить какой-нибудь поцесс в окне Терминала, то больше в данном окне вы ничего не сможете выполнить. Поэтому иногда полезно запускать процессы в фоновом режиме. Для этого используется символ & (амперсанд). Например нужно рекурсивно скопировать один каталог в другой. Чтобы запустить этот процесс в фоне выполнитм команду:

cp -R /home/dm/Загрузки/ /home/dm/Данные/ &

На этом этапе Терминал будет готов к вводу новых команд, а наш процесс копирования будет происходить в фоне. Чтобы вернуть возможность управления фоновым процессом нужно выполнить команду:

fg

fg – означает: ForeGround(приоритетный). После этой команды Терминал снова будет занят данной командой. Чтобы снова сделать данный процесс фоновым нужно сначала остановить его, нажав Ctrl+Z, а потом выполнив команду:

bg

что означает – BackGround(фоновый). Таким способом можно запустить несколько заданий, при этом каждму процессу будет присвоен номер задания. Если выполнить в Терминале команду:

jobs

то она выведет список всех заданий, которые мы запустили в данном Терминале. После номера процесса указывается его состояние: остановлен, выполняется или приостановлен. В конце строки указывается команда, которая выполняется этим процессом. Чтобы восстановить конкретное задание в приоритетный режим нужно выполнить команду fg n, где n – означает номер задания, к примеру, fg 2.

Также для управления процессами используются сигналы. В этом нам поможет команда kill, которая посылает нужному процессу (указав его PID) любой сигнал. Например:

kill -9 3849

Данная команда “убьет” грубым образом процесс 3462 не дав ему корректно завершиться, а если выполнить команду:

kill -19 3849

то процесс 3462 будет остановлен. Если нужно корректно завершить запущенный процесс, выполните команду:

kill -15 3849

Часто используемые сигналы kill:

   1       HUP (hang up, отбой)
   2       INT (interrupt, прекращение выполнения команды)
   3       QUIT (quit, завершение. То же что и INT, но сильнее)
   6       ABRT (abort, аварийное завершение)
   9       KILL (kill, завершает процесс некорректно, но наверняка)
   14     ALRM (alarm clock, будильник)
   15    TERM (корректное завершение процесса)
   18    CONT (продолжение выполнения приостановленного процесса)
   19    TERM (приостановка выполнения процесса)


Leave a Reply

Статьи