Ваш надежный
хостинг партнер
(495) 797-8-500

8-800-700 40 36

У Вас нет выбранных услуг.



Новости компании, технические статьи

Управление процессами и наблюдение за ними в дистрибутивах Linux (CentOS) 19.08.2017

Управление процессами и наблюдение за ними в дистрибутивах Linux (CentOS)

Содержание:
  • Работа с запущенными процессами

  • Использование PID процессорных идентификаторов

  • Наблюдаем за процессами посредством утилиты strace

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

Работа с запущенными процессами

На Linux-серверах, как и любых других серверных машинах, имеется возможность запуска приложений, которые компьютер рассматривает в виде процессов. При обработке системой закадрового, низкоуровневого управления жизненными циклами процессов, пользователь зачастую нуждается в другом способе взаимодействия с ОС, чтобы иметь возможность управлять процессами на высоких уровнях. Для начала рассмотрим простейшие моменты, связанные с управлением процессами средствами инструментов, интегрированных в дистрибутивы Linux.

Команда top

Это наиболее простой способы выяснить, какие процессы запущены на серверной машине в настоящее время:

  • top
    top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05
    Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
    Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers
    Swap: 0k total, 0k used, 0k free, 258976k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init
    2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
    3 root 20 0 0 0 0 S 0.0 0.0  0:00.07 ksoftirqd/0
    6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
    7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0
    8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
    9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
    10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

В верхней части выводимой информации предоставлена статистика работы системы, а если конкретнее, нагрузка на систему и число выполняемых задач. В нижней части отображается информация по запущенным процессам и статистики их использования.

Команда htop

Посредством этой усовершенствованной версии команды top можно получать более развернутые данные по процессам. Она доступна в хранилищах. Для установки используем:

sudo apt-get install htop

Использование ps для получения процессов в виде списка

Посредством приведенных выше команд можно получить удобный интерфейс, позволяющий мониторить запущенные процессы, который аналогичен более привычному для многих диспетчеру задач. Однако такого инструментария далеко не всегда достаточно в плане гибкости и не позволяют адекватно охватывать требуемые системные сценарии.

Для получения более полной картины процессов можно запустить такую команду:

  • ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.2 24188 2120 ? Ss 14:28 0:00 /sbin/init
    root 2 0.0 0.0 0 0 ? S 14:28 0:00 [kthreadd]
    root 3 0.0 0.0 0 0 ? S 14:28 0:00 [ksoftirqd/0]
    root 6 0.0 0.0 0 0 ? S 14:28 0:00 [migration/0]
    root 7 0.0 0.0 0 0 ? S 14:28 0:00 [watchdog/0]
    root 8 0.0 0.0 0 0 ? S< 14:28 0:00 [cpuset]
    root 9 0.0 0.0 0 0 ? S< 14:28 0:00 [khelper]. . .

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

Использование PID процессорных идентификаторов

В Unixо-подобных системах для каждого процесса существует собственный PID-идентификатор, посредством которого ОС способна отслеживать и идентифицировать любую активность процессов. Чтобы узнать идентификатор того или иного процесса можно воспользоваться следующей командой:

  • pgrep bash

Таким образом, можно запросить идентификатор процесса и вернуть его. В процессе запуска первый запущенный процесс называется init с PID 1. Он отвечает за инициацию/запуск всех остальных системных процессов. Существует такое понятие, как родительский процесс, который ответственен за запуск других процессов. В случае, когда порождающие процессы прекращаются, дочерние процессы также прекращают работу. PID родительских процессов называют PPID. Когда пользователь общается с операционной системой и нуждается в чтении процессов, имеет место перевода идентификаторов в имена процессов и наоборот. Именно для этого различные утилиты отправляют свой PID.

Один из наиболее распространенных способов передачи сигналов посредством PID является команда kill. По умолчанию ее функционал сводится к завершению процесса (kill PID_of_target_process). При выполнении данной команды всем процессам отправляется TERM-сигнал. Таким образом, рабочая программа выполняет требуемые операции по очистке и безопасно завершает работу.

Наблюдаем за процессами посредством утилиты strace

Утилита strace присутствует во многих Linux-дистрибутивах по умолчанию и зачастую используется в целях отладки, обучения и диагностики. Посредством strace можно решать самые разные задачи, включая мониторинг старта/завершения процессов, а также избавить себя от проблем с поиском возникших программных сбоев без доступа к исходным кодам.

Также данную программу можно использовать при необходимости получения/отправки bug-репортов для разработчиков того или иного ПО. Средствами данного инструмента можно воочию увидеть, как именно работает запущенная программа в подробностях.

Особенности запуска

Системный вызов представляет собой обращение программ к системному ядру для выполнения того или иного действия. Такие вызовы необходимы потому, что процесс не способен взаимодействовать с системой непосредственным образом.

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

Для запуска утилиты strace используется команда

  • strace program_name

После ее запуска происходит запуск программы program_name с выведением в поток стандартных выводов сообщений о выполняемых вызовах в системе. Существуют текстовые редакторы, такие как Vim, которые оснащены цветной подсветкой вывода strace, а это существенно упрощает анализ крупных файлов с трассировочными текстами.

Как вариант strace может запускаться для трассировки уже запущенных процессов. Для этого как раз потребуется PID требуемого процесса, о чем мы говорили выше. Этот идентификатор необходимо передать, как параметр в опциях –p для утилиты:

  • strace -o trace_output.txt -p 1234

Анализ вывода – наиболее полезная функция данной программы. Структура для строй вывода strace предполагает, что сначала идет имя системного вызова, после чего в круглых скобках будет выведен список параметров, которые переданы вызову. Последний выводящийся информационный блок, который отображается после знака «=», отображает код, по которому завершается системный вызов. В качестве примера приведем несколько строк кода с анализом вывода посредство strace:

  • execve("/bin/ls", ["/bin/ls"], [/* 37 vars */]) = 0

  • brk(0) = 0x9841000

  • access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)

  • mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb779e000

  • access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)

  • open("/etc/ld.so.cache", O_RDONLY) = 3

  • fstat64(3, {st_mode=S_IFREG|0644, st_size=78866, ...}) = 0

  • mmap2(NULL, 78866, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb778a000

  • close(3) = 0


Возврат к списку