В данной статье речь пойдет об управлении процессами в Терминале. Это будет полезно в первую очередь тем, кто обслуживает серверы, системным администраторам, а так же для пользователей, которые хотят саморазвиваться и узнавать все больше и больше о 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 (приостановка выполнения процесса)