Управление процессами
СкопированоВ Windows управление процессами сводится к диспетчеру задач, который имеет графический интерфейс пользователя. С помощью этой утилиты можно запускать и останавливать разные процессы. В Unix-подобных операционных системах, которые являются изначально многопользовательскими, предусмотрены довольно развитые механизмы управления процессами.
Все процессы в Unix-подобных операционных системах делятся на фоновые (background) и приоритетные (foreground). В статье «Интерфейс командной строки» описано использование терминала для запуска приоритетных процессов. Приоритетный режим означает, что терминал будет ожидать завершения процесса и не будет доступен для ввода новых команд до его завершения.
Иногда удобнее использовать фоновый процесс. Например, если мы хотим все время посылать запросы сетевому устройству с помощью команды ping
, как это было описано в статье «Работа с сетью» (ключ -i
устанавливает количество секунд между запросами к серверу):
ping 8.8.8.8 -i 15 &> [1] <PID>
ping 8.8.8.8 -i 15 & > [1] <PID>
Символ &
в конце строки команды и означает запуск процесса в фоновом режиме. <
(от Process Identifier) — идентификационный номер процесса. Зная его, можно отслеживать состояние процесса, подавать ему сигналы или управлять им напрямую средствами операционной системы. [1
— обозначает номер задания (фонового процесса пользователя, который запущен из данного терминала).
Если запустить другой процесс, например, посылать запросы к другому сетевому устройству, то вы увидите, что номер сменился:
ping 8.8.4.4 -i 10 &> [2] <PID>
ping 8.8.4.4 -i 10 & > [2] <PID>
Изменится также и PID. Вы можете посмотреть список задач, для этого используется команда:
jobs> [1] - running ping 8.8.8.8> [2] + running ping 8.8.4.4
jobs > [1] - running ping 8.8.8.8 > [2] + running ping 8.8.4.4
Чтобы перевести процесс из фонового в приоритетный режим, можно использовать команду fg
. Если выполнить её без аргументов, то она переведёт последний фоновый процесс в приоритетный режим. В нашем случае это будет процесс под номером [2
.
Запустим процесс в приоритетном режиме и нажмём сочетание клавиш Ctrl Z:
ping 8.8.8.8 -i 15^Z> [1] + 22495 suspended ping 8.8.8.8 -i 15
ping 8.8.8.8 -i 15 ^Z > [1] + 22495 suspended ping 8.8.8.8 -i 15
Вызовем список процессов с помощью jobs
:
jobs> [1] + suspended ping 8.8.8.8 -i 15
jobs > [1] + suspended ping 8.8.8.8 -i 15
suspended
означает, что процесс остановлен и стоит на паузе. Его можно продолжить командой bg
и перевести в фоновый режим:
bg> [1] + 22495 continued ping 8.8.8.8 -i 15> 64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=28.854 msjobs> [1] + running ping 8.8.8.8 -i 15
bg > [1] + 22495 continued ping 8.8.8.8 -i 15 > 64 bytes from 8.8.8.8: icmp_seq=1 ttl=108 time=28.854 ms jobs > [1] + running ping 8.8.8.8 -i 15
Приоритет процесса
СкопированоИногда случается, что запущенный процесс съедает слишком много ресурсов CPU, и тогда его начинает не хватать для обработки других, не менее, а иногда даже более важных процессов. В этом случае можно использовать команды nice
и renice
для изменения приоритета.
Приоритет процесса, обычно указывается в диапазоне от -20 до 20. Чем меньше значение (ниже нуля) тем выше приоритет.
Например, нам нужно заархивировать большой каталог на сервере, где запущена база данных. Чтобы процесс архивации не мешал работе БД, можно запустить его с наименьшим приоритетом:
nice -n 20 tar -czvf /path/to_save_archive.tar.gz /path/to_big_folder
nice -n 20 tar -czvf /path/to_save_archive.tar.gz /path/to_big_folder
Чтобы изменить приоритет уже запущенной задачи, используйте команду renice
:
renice -n 20 -p PID
renice -n 20 -p PID
Мониторинг процессов
СкопированоЕсть инструменты и для мониторинга процессов, запущенных в операционной системе. Эти инструменты позволяют отслеживать потребляемые ресурсы (использование процессора, оперативной памяти, дискового пространства и так далее) и взаимодействие с другими процессами и пользователями.
Можно просмотреть в реальном времени нагрузку на процессор, состояние оперативной памяти, состояние своп-файла и все процессы, запущенные не только из текущего терминала:
top
top
Утилита top
используется для мониторинга состояния операционной системы. С помощью нажатия клавиши Q на клавиатуре можно выйти из top
, а нажатие клавиши ? позволяет вывести справку по использованию этой утилиты. На операционных системах семейства Linux чаще пользуются утилитой htop
, которая имеет более простой интерфейс.
Чтобы получить полный отчёт именно о процессах используют утилиту ps
. Название утилиты образовалось от «Process Status». Выполнение этой команды в терминале приведёт к выводу списка терминалов. А если добавить ключ -
, вы получите список всех текущих процессов в операционной системе:
ps -A
ps -A
Ключ -f
используется, чтобы информация о процессах была более детализирована:
ps -Af
ps -Af
Команда kill
используется для остановке процесса:
kill <PID>
kill <PID>
PID
— это номер (идентификатор) процесса, который можно получить помощью утилиты ps
или top
. Номер процесса будет указан в левой колонке таблицы.
Остановка процесса произойдёт, если в коде программы процесса описан ответ на сигнал SIGKILL
. Но процесс можно завершить принудительно командой:
sudo kill -9 <PID>
sudo kill -9 <PID>
Обычно операционная система попросит выполнить эту команду с директивой sudo
.