- Работа с процессами в Linux
- Список процессов
- Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами
- Управление процессами
- Запуск xeyes
- Остановка процесса
- fg и bg
- Использование «&»
- Несколько фоновых процессов
- Введение в сигналы
- SIGTERM и SIGINT
- Полное убийство
- nohup
- Используем ps для вывода списка процессов
- Просмотр «леса» и «деревьев»
- «u» и «l» опции ps
- Использование top
- renice
- Об авторах
- Daniel Robbins
- Chris Houser
- Aron Griffis
- Как использовать команду ps для мониторинга процессов Linux
- Управление процессами в Linux
- Программа для показа процессов в Linux
- Как увидеть все процессы в Linux
- Отображение иерархии процессов (дерево процессов в Linux)
- Как напечатать дерево определённого процесса
- Фильтрация вывода ps по определённым строкам (по имени команды, например)
- Больше столбцов в выводе ps
- Нужно ли указывать дефис перед опциями ps
- Поиск процессов по идентификатору процесса
- Поиск процессов по имени команды
- Как увидеть потоки процесса
- Как увидеть процессы определённого пользователя
- Как вывести все процессы запущенные пользователем root
- Просмотр групповых процессов
- Листинг процессов по терминалам
- Выбор столбцов для отображения
- Сортировка вывода по столбцам
- Все возможные поля ps
- Примеры настраиваемого вывода ps
- Как найти имя процесса по PID
- Показать родительский и дочерний процессы
- Как выключить процесс по идентификатору процесса
- Как выключить процесс зная его имя
- Как остановить несколько процессов по имени
- Прежде чем убить процесс
- Устранение неполадок производительности системы Linux
- Вывод информации о безопасности
- Выполните мониторинг процессов в режиме реального времени с помощью утилиты watch
Работа с процессами в Linux
Список процессов
Вывести на экран список текущих процессов, запущенных пользователем, можно командой:
Чтобы посмотреть список всех процессов с дополнительной информацией, вводим:
Мы увидим, примерно, следующее:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 661 0.0 0.0 4072 8 tty1 Ss+ Jul03 0:00 /sbin/mingetty
root 662 0.0 0.0 4072 8 tty2 Ss+ Jul03 0:00 /sbin/mingetty
root 16355 0.0 0.0 171636 3308 pts/0 S 15:46 0:00 sudo su
root 16366 0.0 0.0 140896 1556 pts/0 S 15:46 0:00 su
root 16368 0.0 0.0 108316 1944 pts/0 S 15:46 0:00 bash
root 18830 0.0 0.0 110244 1172 pts/0 R+ 16:20 0:00 ps u
- USER — учетная запись пользователя, от которой запущен процесс.
- PID — идентификатор процесса.
- %CPU — потребление процессорного времени в процентном эквиваленте.
- %MEM — использование памяти в процентах.
- VSZ — Virtual Set Size. Виртуальный размер процесса (в килобайтах).
- RSS — Resident Set Size. Размер резидентного набора (количество 1K-страниц в памяти).
- TTY — терминал, из под которого был запущен процесс.
- STAT — текущее состояние процесса. Могут принимать значения:
- R — выполнимый процесс;
- S — спящий;
- D — в состоянии подкачки на диске;
- T — остановлен;
- Z — зомби.
- W — не имеет резидентных страниц;
- Дмитрий Моск — IT-специалист.
Настройка серверов, компьютерная помощь.
Как управлять процессами в операционной системе Linux
Источник
Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами
В этом отрывке рассмотрены команды управления процессами. Вы научитесь замораживать процессы, размораживать, отправлять в фоновый режим, изменять приоритет, просматривать запущенные процессы и жестоко их убивать. Введено понятие сигналов. Рассмотрены такие команды, как bg, fg, jobs, kill, nohup, nice, renice, ps и top.
Навигация по основам Linux от основателя Gentoo:
Часть I
- BASH: основы навигации (вступление)
- Управление файлами и директориями
- Ссылки, а также удаление файлов и директорий
- Glob-подстановки (итоги и ссылки)
Часть II
Управление процессами
Запуск xeyes
Для изучения управления процессами, какой-нибудь процесс необходимо сначала запустить. Убедитесь, что у вас запущен X (графический сервер — прим. пер.) и выполните следующую команду:
$ xeyes -center red
Вы увидите всплывающее окошко xeyes и красные глаза, следящие за курсором мыши. Также, обратите внимание, что у вас не появилось приглашения для ввода команд в терминале.
Остановка процесса
Чтобы вернуть приглашение, вы должны нажать Control-C (часто пишется как Ctrl-C или ^C):
Вы получили назад свое приглашение, но и окно xeyes исчезло. Фактически, процесс был «убит». Вместо завершения по Control-C, мы можем просто остановить процесс с помощью Control-Z:
На этот раз вы получите приглашение bash’a, а окно xeyes останется сверху. Если вы с ним немного поиграете, возможно заметите, что глаза заморожены на одном месте. Если окно xeyes будет перекрыто другим окном и затем снова открыто, вы увидите, что оно даже не перерисовалось. Процесс не делает ничего. Он на самом деле остановлен.
fg и bg
Чтобы процесс «растормошить» и запустить обратно, мы можем вывести его на передний план используя команду fg (от англ. foreground — прим. пер.):
$ fg
(test it out, then stop the process again)
Control-Z
$
А теперь продолжим его в фоне с помощью команды bg (от англ. backgroud — прим. пер.):
Прекрасно! Процесс xeyes сейчас запущен в фоновом режиме, а мы снова имеем приглашение bash.
Использование «&»
Если нам нужно сразу запустить xeyes в фоновом режиме (вместо использования Control-Z и bg), мы можем просто добавить «&» (амперсанд) в конец команды xeyes:
$ xeyes -center blue &
[2] 16224
Несколько фоновых процессов
Теперь в фоне у нас одновременно работают красные и синие xeyes. Мы можем просмотреть список заданий с помощью jobs:
Число в левой колонке — это порядковый номер задания, который bash присваивает ему при запуске. Плюс (+) у второго задания значит, что это «текущее задание», оно будет выведено на передний план при вводе fg. Вы также можете вывести на передний план конкретное задание указывая его номер; например, fg 1 сделает таковым красный xeyes. Следующая колонка это идентификатор процесса или сокращенно pid, любезно добавленный в вывод благодаря опции -l. Наконец, состояние обоих процессов «Running» (выполняется) и их командная строка справа.
Введение в сигналы
Чтобы убить, остановить, или продолжить процесс, Linux использует специальную форму взаимодействия, называемую сигналы. Отправляя сигнал некоторому процессу, вы можете его завершить, остановить, или сделать что-нибудь еще. Это то, что происходит на самом деле, когда вы нажимаете Control-C, Control-Z, или используете bg и fg — вы указываете bash отправить процессу определенный сигнал. Сигналы также можно отправить с помощью команды kill указав ей как параметр id процесса (pid):
Как можно заметить, kill не обязательно «убивает» процесс, хотя может и это. Используя опцию -s, kill может отправить процессу любой сигнал. Linux убивает, останавливает или продолжает процессы когда они получают SIGINT, SIGSTOP, или SIGCONT сигнал соответственно. Есть и другие сигналы, которые вы можете отправить процессам; некоторые сигналы могут обрабатываться внутри самих программ. Вы можете узнать о сигналах которые обрабатывает конкретная программа поискав в ее man’е секцию SIGNALS.
SIGTERM и SIGINT
Если вы хотите убить процесс, есть несколько вариантов. По-умолчанию, kill отправляет SIGTERM, который отличается от SIGINT отправляемого по Control-C, но обычно имеет тот же эффект:
Полное убийство
Процесс может игнорировать оба сигнала, SIGTERM и SIGINT, либо по своему усмотрению, либо потому, что он остановлен, либо еще как-то «застрял». В этом случае, может быть необходимо использование большого молотка — сигнала SIGKILL. Процесс не может игнорировать SIGKILL:
nohup
Терминал в котором вы запускаете задания, называется терминалом управления заданиями. Некоторые шеллы (но не bash по-умолчанию), отправляют сигнал SIGHUP фоновым заданиям когда вы выходите, заставляя их завершаться. Для защиты процессов от такого поведения, используйте nohup когда запускаете процесс:
Используем ps для вывода списка процессов
Команда jobs, которую мы использовали ранее выводит только те процессы, которые были запущены в вашей сессии bash. Чтобы увидеть все процессы в вашей системе, используйте ps совместно с опциями a и x:
Здесь приведены только первые 5 процессов, поскольку обычно список процессов очень длинный. Команда дает вам «слепок» всего, что в данный момент выполняется на машине, однако в нем много лишней информации. Если бы вы, не указали ax, вы бы получили список только тех процессов, которые принадлежат вам, и которые есть в управляющем терминале. Команда ps x покажет все ваши процессы, даже те, которых нет в управляющем терминале. Если использовать ps a, то будет получен список процессов из терминалов всех пользователей.
Просмотр «леса» и «деревьев»
Вы также можете просмотреть и другую информацию о каждом процессе. Опция —forest позволяет легко просмотреть иерархию процессов и даст вам представление о том, как различные процессы в системе взаимосвязаны между собой. Если один процесс запускает другой процесс, то запущенный будет называться его потомком. В выводе —forest, родители находятся слева, а потомки появляются как ветки справа:
«u» и «l» опции ps
Опции u и l могут быть использованы в любой комбинации с опциями a, x с целью получения более подробной информации о процессах:
Использование top
Если вы обнаружили, что запускаете ps несколько раз подряд, пытаясь рассмотреть происходящие изменения, возможно вам стоит воспользоваться top. Программа top отображает постоянно обновляющийся список процессов, наряду с другой полезной информацией:
Каждый процесс имеет свое значение приоритета, которое Linux использует для разделения времени CPU. Вы можете указать приоритет процесса при его запуске, с помощью команды nice:
$ nice -n 10 oggenc /tmp/song.wav
С тех пор, как приоритет стал называться nice, он стал легче для запоминания, так, большее значение nice делает «хорошо» (nice — хорошо, замечательно; прим. пер.) другим процессам, позволяя им получить более приоритетный доступ к времени CPU. По-умолчанию, процессы запускаются с приоритетом 0, поэтому установка приоритета в 10 для oggenc значит, что он будет давать больше времени поработать другим процессам. Как правило, это означает, что oggenc даст возможность другим процессам выполняться со своей обычной скоростью, не зависимо от того, сколько времени процессора хочет сам oggenc. Вы могли видеть эти «уровни любезности» в колонке NI у ps и top ранее.
renice
Команда nice может изменять приоритет процессов только во время их запуска. Если вам необходимо изменить приоритет работающего процесса, воспользуйтесь командой renice:
$ renice 10 641
641: old priority 0, new priority 10
Спасибо Dmitry Minsky (Dmitry.Minsky@gmail.com) за перевод.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Источник
Как использовать команду ps для мониторинга процессов Linux
ps (processes status — статус процессов) — это встроенная утилита Unix/Linux для просмотра информации, касающейся выбора запущенных процессов в системе: она считывает эту информацию из виртуальных файлов в файловой системе /proc. Это одна из важных утилит для системного администрирования, особенно в рамках мониторинга процессов, чтобы помочь вам понять, что происходит в системе Linux.
Программа ps имеет множество опций для манипулирования выходными данными, однако вы найдёте небольшое количество из них практически полезными для ежедневного использования.
Утилита ps выводит снимок процессов на вашем компьютере Linux. Вы сможете найти процессы по имени, пользователю или даже терминалу с таким количеством деталей, сколько вам нужно. В этой статье подготовлено множество примеров использования ps.
Управление процессами в Linux
Сердцем всех Linux и Unix-подобных операционных систем является ядро. Среди его многочисленных обязанностей — распределение системных ресурсов, таких как оперативная память и процессорное время. Они должны выполняться в режиме реального времени, чтобы все запущенные процессы получали свою справедливую долю в соответствии с приоритетом каждой задачи.
Иногда задачи могут блокироваться, или зацикливаться, или перестать отвечать по другим причинам. Или они могут продолжать работать, но сожрать слишком много процессорного времени или оперативной памяти, или вести себя каким-то похожим антисоциальным образом. Иногда задачи должны быть убиты для сохранения стабильной работы системы. Разумеется, первых шаг заключается в идентификации проблемного процесса.
Но, возможно, у вас вообще нет проблем с задачами или производительностью. Возможно, вам просто любопытно, какие процессы выполняются на вашем компьютере, и вы хотели бы заглянуть под капот операционной системы Linux. Команда ps удовлетворяет обоим этим требованиям. Она даёт вам снимок того, что происходит внутри вашего компьютера «прямо сейчас».
ps достаточно гибка, чтобы предоставить вам именно ту информацию, которая вам нужна, именно в том формате, который вам нравится. На самом деле, у ps очень много опций. Опции, описанные здесь, будут соответствовать большинству обычных потребностей. Если вы хотите изучить команду ps ещё глубже, то знакомство с командой ps в этой статье и примеры использования ps облегчат вам восприятие справочной страницы.
Программа для показа процессов в Linux
Самый простой способ использовать ps — запустить её без параметров:
ps
ps покажет список процессов в данном терминале.
В выводе присутствует четыре столбца:
- PID: идентификационный номер процесса.
- TTY: имя консоли, на которой пользователь выполнил вход.
- TIME: количество времени центрального процессора, которое потребил процесс.
- CMD: имя команды, которая запустила процесс
Как увидеть все процессы в Linux
Добавление опции -e (выбрать все процессы) сделает так, что ps перечислит процессы, которые были запущены всеми пользователями, а не только пользователем, который запускает команду ps. Поскольку это будет длинный список, то вы можете добавить команду less.
Список процессов с возможностью прокрутки в команде less:
Теперь записей о процессах намного больше, но мы видим те же четыре столбца, что и раньше. Вопросительный знак (?) в столбце TTY означает, что процесс запускался не из окна терминала.
Отображение иерархии процессов (дерево процессов в Linux)
Если вы видите, какие процессы запустили другие процессы, то иногда это может помочь выяснить проблему или определить конкретный процесс. Для этого мы используем опцию -H.
Отступы указывают, какие процессы являются родителями каких других процессов.
Чтобы добавить немного ясности, мы можем попросить ps добавить несколько линий ASCII и нарисовать иерархию в виде дерева. Это можно сделать опцией —forest.
Это позволить проще отслеживать, какие процессы являются родителями других процессов.
Как напечатать дерево определённого процесса
Вы можете получить дерево процессов только нужной вам программы следующим образом (замените sshd на интересующий вас процесс):
Об опции -C будет рассказано далее в этой статье.
Фильтрация вывода ps по определённым строкам (по имени команды, например)
Вы можете направить вывод из ps через grep и найти нужные записи о процессах по любым строкам. Здесь мы ищем записи, соответствующие поисковому запросу «firefox»:
В этом случае выходные данные представляют собой одну запись для интересующего нас процесса. Конечно, если бы мы запустили несколько экземпляров Firefox, в списке было бы более одного элемента.
Больше столбцов в выводе ps
Чтобы добавить дополнительные столбцы к выводу, используйте параметр -f (полный формат).
Дополнительный набор столбцов включён в вывод ps.
Из новых столбов появились:
- UID: идентификатор пользователя владельца этого процесса.
- PPID: идентификатор родительского процесса.
- C: Количество детей, которые есть у процесса.
- STIME: Время начала. Время, когда процесс был запущен.
Используя опцию -F (дополнительный полный формат), мы можем получить ещё больше столбцов:
Если у вас маленькое окно терминала, то столбцы, которые мы получаем в этот раз, требуют прокрутки экрана в сторону, чтобы показать их все. Нажатие клавиши «Стрелка вправо» смещает дисплей влево.
Теперь добавились следующие столбцы:
- SZ: размер страниц ОЗУ образа процесса.
- RSS: резидентный размер набора. Это не подкачанная физическая память, используемая процессом.
- PSR: процессор, которому назначен процесс.
Нужно ли указывать дефис перед опциями ps
В некоторых примерах вы можете увидеть использование ps с опциями без дефиса или с длинными вариантами написания опций в стиле GNU. Для совместимости, ps поддерживает все три формата. Опции без дефиса — это стиль BSD и значение опций с дефисом и без может быть различным!
Пример показа процессов в формате BSD:
В этой команде значение опций следующее:
- u — ориентированный на пользователя формат
- a — убирает ограничение «только свои процессы»
- x — убирает ограничение «только процессы с терминалом»
Проще говоря, если использовать вместе a и x, то будут показаны все процессы.
Нужно быть аккуратным, и не забывать ставить дефис если вы используете опции UNIX, поскольку в случае неопределённости ps будет пытаться трактовать в разных вариантах. В этой инструкции кроме рассмотренного примера везде используются опции UNIX.
Поиск процессов по идентификатору процесса
Как только вы нашли идентификатор процесса для интересующего вас процесса, вы можете использовать его с командой ps, чтобы вывести подробную информацию об этом процессе. Для этого используйте спользуйте параметр -p после которого укажите число — идентификатор процесса:
Можно указывать более чем один идентификатор процесса, перечислив их через запятую или через пробел.
Поиск процессов по имени команды
Опция -C (КОМАНДА) позволяет вам искать процесс, используя имя команды. То есть имя команды, которая запустила процесс. Это несколько отличается от строки команды, которая может включать имена путей и параметры или опции.
Выведена информация только о процессе, запущенным указанной командой:
Процессов может быть несколько если запущено множество экземпляров данной команды:
Как увидеть потоки процесса
Чтобы вывести все потоки процесса, используйте флаг -H. Опция -L приведёт к показу столбца LWP (light weight process — процесс с малым весом), а также столбца NLWP (number of light weight process — число процессов с малым весом).
Как увидеть процессы определённого пользователя
Чтобы увидеть процессы, принадлежащие конкретному пользователю, используйте опцию -u (СПИСОК ПОЛЬЗОВАТЕЛЕЙ):
Отображаются процессы, принадлежащие учётной записи пользователя mial.
Как вывести все процессы запущенные пользователем root
Это частный случай показа процессов определённого пользователя.
Команда ниже позволяет вам просматривать каждый процесс, работающий с привилегиями пользователя root (действительный и эффективный идентификатор) в формате пользователя.
Просмотр групповых процессов
Если вы хотите перечислить все процессы, принадлежащие определённой группе (реальный идентификатор группы (RGID) или имя), введите:
Чтобы вывести список всех процессов, принадлежащих эффективному имени группы (или сеанса), введите.
Листинг процессов по терминалам
Чтобы увидеть процессы, связанные с TTY, используйте опцию -t (УКАЖИТЕ TTY). При использовании без номера TTY опция -t сообщает о процессах, связанных с текущим окном терминала.
Все перечисленные процессы связаны с pts/1.
Выбор столбцов для отображения
С опцией -o (ФОРМАТ) вы можете выбрать, какие столбцы вы хотите включить в вывод ps. Столбцы нужно указывать по имени. В руководстве по ps:
вы найдёте длинный список имён столбцов в разделе STANDARD FORMAT SPECIFIERS.
В следующем примере мы выводим потребление процессом времени центрального процессора (pcpu), потребление процессором памяти (pmem) и запустившая его команда вместе с опциями (args):
Обратите внимание, что опция -o не добавляет столбцы в стандартным, а выводит только запрошенные поля.
Сортировка вывода по столбцам
Вы можете отсортировать вывод, используя опцию —sort. Давайте отсортируем вывод по столбцу CPU:
Дефис «—» означает сортировку от большего к меньшему.
Чтобы увидеть десять самых ресурсоемких процессов, передайте вывод через команду head:
Мы получаем отсортированный, усечённый список.
Если мы добавим больше столбцов для вывода, мы сможем отсортировать по большему количеству столбцов.
Без дефиса или со знаком «+» сортировка выполняется от меньшего к большему.
Добавим в сортировку столбец pmem:
Сортировка по-прежнему выполняется по значению pcpu, но если для каких-то записей эти значения одинаковые, то выполняется сортировка по pmem для этих значений.
Давайте сделаем вывод результатов немного более полезным и добавим столбец идентификатора процесса (pid), чтобы мы могли видеть номер процесса каждого процесса в нашем листинге.
Теперь мы можем идентифицировать процессы.
Все возможные поля ps
Чтобы увидеть все возможные для вывода поля ps выполните такую команду:
Эти поля вы можете применять с опцией -o.
Примеры настраиваемого вывода ps
Команда ниже позволяет вам увидеть PID, PPID, имя пользователя и команду процесса.
Ниже приведён ещё один пример пользовательского формата вывода, показывающий группу файловой системы, значение nice, время начала и истекшее время процесса.
Как найти имя процесса по PID
Чтобы найти имя процесса, используя его PID.
Показать родительский и дочерний процессы
Чтобы выбрать конкретный процесс по его имени, используйте флаг -C, это также отобразит все его дочерние процессы.
Чтобы найти все PID всех экземпляров процесса, что полезно при написании сценариев, которые должны считывать PID из выходных данных или файла std.
Как выключить процесс по идентификатору процесса
Мы рассмотрели ряд способов идентификации процессов, включая имя, команду, пользователя и терминал. Мы также рассмотрели способы идентификации процессов по их динамическим атрибутам, таким как использование процессора и памяти.
Так или иначе, мы можем определить процессы, которые работают. Зная их идентификатор процесса, мы можем (если нужно) остановить любой из этих процессов с помощью команды kill. Если бы мы хотели убить процесс 898, мы бы использовали этот формат:
Если все идёт хорошо, процесс молча завершается.
Как выключить процесс зная его имя
Команда pkill позволяет вам убивать процессы по имени. Убедитесь, что вы определили правильный процесс! Эта команда завершит процесс top.
Опять же, нет новостей, это хорошие новости. Процесс молча завершается.
Как остановить несколько процессов по имени
Если у вас запущено несколько копий процесса, или процесс породил несколько дочерних процессов (как это может сделать Google Chrome), как вы можете выключить их? Это так же просто. Мы используем команду killall.
У нас запущено два экземпляра top:
Мы можем завершить их обоих с помощью этой команды:
Отсутствие ответа означает отсутствие проблем, т. е. оба эти процессы были остановлены.
Прежде чем убить процесс
Убедитесь, что это тот, который вам нужен, и убедитесь, что это не вызовет никаких проблем. В частности, стоит проверить с помощью параметров -H и —forest, чтобы убедиться, что в нем нет важных дочерних процессов, о которых вы забыли.
Устранение неполадок производительности системы Linux
Если ваша система не работает должным образом, например, если она необычно медленная, вы можете выполнить некоторые неполадки системы следующим образом.
Чтобы найти все процессы, потребляющие больше всего памяти и ЦПУ в Linux:
Вывод информации о безопасности
Показать контекст безопасности (специально для SELinux) можно следующим образом:
С помощью этой команды вы также можете отобразить информацию о безопасности в определённом пользователем формате:
Выполните мониторинг процессов в режиме реального времени с помощью утилиты watch
Наконец, поскольку ps отображает статическую информацию, вы можете использовать утилиту watch для непрерывного обновления информации на экране и мониторинга процессов в режиме реального времени с повторяющимся выводом. В этом примере информация будет одновляться через каждую секунду. Укажите свою собственную команду ps для соответствия вашей цели.
Источник