Управляем процессами в 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 (приостановка выполнения процесса)


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *