Вникаем в работу с процессами в Linux

Опубликовано: 4 Апрель, 2015 в разделе: Обучение

Уже некоторое понимание этой операционной системы у меня сложилось. Неплохая, надо сказать, система. Удобная. Для экспериментов и реализации в творческой струе — в самый раз. Файлы создавать-редактировать вроде научился. Как быть с процессами?

Для этого в основном используются две программы ps и top.

Типичные задачи

Типичные задачи можно выделить следующего характера:

  1. Найти все процессы определенного пользователя;
  2. Найти определенный процесс;
  3. Завершить процесс;
  4. Изменить приоритет процесса;

Обычно, кстати, я пользуюсь синтаксисом BSD-систем, как-то проще это даётся.

# ps U dmitry

найдёт все процессы, запущенные под пользователем dmitry

Процессы пользователя

Процессы пользователя

Пользователя можно указывать любого. Сгодится даже его UID вместо имени. Это если мы подозреваем, что юзер Вася что-то накосячил и запустил ресурсоёмкие приложения. Или что с правами пользователя запущен ненужный процесс… Одним словом, иногда надо. Не будем заострять внимание.

Бывает, так же, что процессы запущены с каким-то параметрами, которые нам нужно зафиксировать. Тут уже играет роль так называемая командная строка — параметры, передаваемые в процесс. Например, видно, что процесс с PID (идентификатор процесса) 15068 — это текстовый редактор vim. Параметром запуска является имя файла, который открыт в этом редакторе.

Для того, чтобы найти определенный процесс, проще всего воспользоваться фильтром grep:

# ps aux | grep httpd

Поиск определенного процесса

Поиск определенного процесса

Так мы отфильтруем среди всего списка процессов те, в описании которых (командная строка, например) присутствует слово httpd.

Так, предположим, найден нежелательный процесс. Как же его завершить?

Завершить процесс в CentOS

Можно завершить процесс натравив на него команду kill:

# kill <сигнал> <pid>

Кстати, посылать сигналы можно не только на завершение. Например, великолепная утилита dd принимает сигнал USR1 и выдает текущий прогресс (а так как выполняется она без отображения прогресса, это бывает полезно).

Ещё один способ — воспользоваться утилитой top:

# top

Утилита top в CentOS Linux

Утилита top в CentOS Linux

Убивать процессы с помощью неё — одно удовольствие. Муха-ха. 🙂 Шутка. Нет, в самом деле. Нажимаем клавишу k (kill), вводим PID процесса и, если надо, сигнал. И жмём Enter. Кстати, утилита имеет богатые возможности h (help). Предлагается изучить возможности утилиты самостоятельно.

Изменить приоритет процесса в Linux

Так, что касается приоритета процессов… Надо сказать, что приоритеты процессорного времени в Linux (nice) могут принимать значения от -20 до 19 (0 — по умолчанию). Чем меньше число, тем больше процессорных циклов получает процесс. Пользователи в системе могут только понижать приоритет своих процессов (выставляя положительные значения), суперпользователь же может выставить любой приоритет.

Запустить приложение с требуемым значением приоритета можно так:

# nice -n 5 команда

Разумеется, вместо значения 5 можно указать нужный уровень «вежливости*».

* под вежливостью (англ. nice) понимается готовность процесса пожертвовать свои такты процессора другим задачам.

А изменить приоритет уже запущенного процесса командой renice:

# renice -n -2 PID

PID — идентификатор процесса, для которого необходимо изменить приоритет.

Правда заметить результат их выполнения можно, когда все процессорные такты используются на 100% (т.е. дефицит процессорного времени).

Стоит, кстати, не забывать про приоритеты процессов в плане ввода-вывода. Для этого служит команда ionice:

# ionice -c2 -n0 bash

Запустит баш с наивысшим приоритетом в плане ввода-вывода. Всего, кстати, есть три вида приоритета: 1 для realtime (все свободные ресурсы поставляются в первую очередь), 2 для best effort (по умолчанию для всех процессов, возможно указание дополнительного приоритета -n<0-7>, большее предпочтение отдается наименьшим значениям) и 3 для idle (процесс может обращаться к диску только тогда, когда никто больше не обращается). Есть ещё параметр -p, который указывает pID процесса, для которого нужно изменить приоритеты.

Выделяя приоритет нужно отдавать себе отчёт в том, что легко можно укокошить систему, случайно выделив все ресурсы на выполнение «тяжелых» задач так, что вмешаться уже не будет возможности. А добавить к этому ещё и возможные опечатки в скрипте, которые могут стать фатальными. Будьте внимательны!

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.