Как найти PID процесса Linux с помощью pidof или pgrep

Ноутбук Linux с приглашением bash

Чтобы найти идентификатор процесса Linux, используйте команду pidof, например: «pidof examplename». Если вы знаете только часть имени PID, вы можете вместо этого использовать «pgrep examplenamefragment». Замените «examplename» и «examplenamefragment» словами, которые вы хотите найти.

Работа с процессом Linux часто означает знание его идентификатора процесса или PID. Это уникальный номер, присваиваемый каждому работающему программному обеспечению. Вот два способа узнать, что это такое.

Что такое идентификатор процесса Linux?

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Внутри Linux отслеживает свои запущенные процессы, присваивая им уникальный идентификационный номер, называемый идентификатором процесса или PID. Каждое запущенное приложение, утилита и демон имеют PID.

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

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

Процесс с PID 1 — это первый процесс, который запускается при запуске Linux процессами загрузки. В системах на основе systemd это будет systemd . В других системах это, скорее всего, init, хотя в некоторых дистрибутивах Linux используются альтернативы, такие как OpenRc или s6.

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

Как получить PID Linux с помощью команды pidof

Команду pidof можно рассматривать как комбинацию «PID» и «of». Это все равно, что спросить, какой у этого процесса PID? Если мы используем команду без параметров, она ничего не делает. Он молча возвращает вас в командную строку. Нам нужно указать имя процесса.

пидоф баш

Поиск PID оболочки bash с помощью команды pidof

pidof сообщает нам, что PID оболочки Bash — 8304. Мы можем проверить это с помощью команды ps. Все, что нам нужно сделать, это вызвать ps без параметров. Он сообщит о процессах, запущенных в текущем сеансе.

PS
список процессов с помощью команды ps

Поскольку ps сообщает обо всех процессах, которые он может найти, включая самого себя, он сообщает нам, что запущен процесс bash и процесс ps. Как и следовало ожидать, процесс bash имеет тот же PID, что и pidof.

Если у вас открыто более одного окна терминала, pidof сообщит обо всех них.

пидоф баш

pidof сообщает о нескольких экземплярах соответствующих процессов

Обратите внимание, что идентификаторы PID перечислены от самого высокого к самому низкому или, другими словами, от самого последнего к самому старому.

Чего это не показывает, так это того, что вы, возможно, не являетесь владельцем всех этих процессов. pidof находит все процессы с совпадающими именами, независимо от того, кому они принадлежат. Давайте посмотрим глубже, направив вывод в grep. Мы используем параметры -e (выбрать все процессы) и -f (полный список) с ps.

пс-эф | грэп баш

Использование ps и grep для определения владельцев процессов bash

Два процесса bash принадлежат пользователю dave, третий — пользователю mary.

Иногда одно приложение генерирует множество процессов, каждый из которых получает свой PID. Это то, что мы получаем с Google Chrome.

пидоф хром

pidof находит много PID для одного приложения со многими процессами

По умолчанию pidof сообщает обо всех процессах. Если мы хотим, мы можем запросить только самый последний из этих процессов. Опция -s (один выстрел) делает именно это.

пидоф -с хром

Поиск самого последнего PID из n приложений с несколькими PID

Было бы утомительно использовать команду kill для ручного уничтожения всех процессов Chrome. Если мы захватим список процессов в переменную, мы сможем передать эту переменную команде kill. Команда kill может принимать несколько PID в своей команде, поэтому она с радостью принимает наш ввод и уничтожает все процессы для нас.

pid=$(pidof chrome) echo $pid kill $pid pidof chrome

Передача переменной, содержащей много PID, в команду kill

Первая команда собирает выходные данные pidof и присваивает их нашей переменной, которую мы называем pid. Нам не нужно выводить это на экран, мы просто делаем это, чтобы показать, что содержит наша переменная.

Мы передаем переменную команде kill, затем снова используем pidof, чтобы проверить, остались ли какие-либо процессы Chrome. Все они были убиты.

Одной из особенностей pidof является то, что он не возвращает PID сценария оболочки. Он возвращает PID оболочки bash, на которой запущен скрипт. Чтобы увидеть оболочку, в которой запущен скрипт, нам нужно использовать параметр -x (скрипты).

pidof -x sleep-loop.sh ps -e | грэп баш

Поиск PID оболочки bash, выполняющей сценарий оболочки

pidof возвращает PID оболочки bash, а ps показывает нам, что запущены две оболочки. Одна — это оболочка, выполняющая команду pidof, а другая — оболочка, выполняющая сценарий.

Как найти PID с помощью команды pgrep в Linux

Команда pgrep немного похожа на pidof при получении идентификаторов процессов в Linux. Однако он не только находит процессы, точно соответствующие ключу поиска, но также возвращает PID любых процессов, имя которых содержит текст поиска.

Вот пример на компьютере, на котором запущен Firefox.

pgrep firefox pgrep fire pgrep fox pgrep refo

Поиск PID Firefox с использованием различных подсказок поиска

Все эти команды находят процесс Firefox и возвращают PID. Но если бы вы ввели команду:

ссылка на pgrep

Сам по себе, как бы вы узнали, если бы pgrep нашел Firefox, а не, скажем, dameon по имени preformd?

Если вы добавите параметр -l (имя списка), pgrep укажет имя процесса вместе с PID.

pgrep ссылка -l

Использование параметра -l для отображения pgrep имени процесса

Если существует несколько экземпляров совпадающего процесса, они все перечислены.

пгреп баш

Список нескольких PID с помощью pgrep

Обратите внимание, что они перечислены в порядке возрастания, что противоположно выходным данным pidof. Они перечислены от самого старого процесса к самому новому процессу. Как мы видели с pidof, не все перечисленные процессы обязательно принадлежат вам.

Опция -u (идентификатор пользователя) позволяет вам искать процессы, соответствующие искомому тексту и принадлежащие указанному пользователю.

pgrep bash -u дейв

Список PID процессов bash пользователя dave

На этот раз мы видим в результатах три bash-процесса. Другой используется Мэри.

pgrep bash -у мэри

Список процессов PID пользователя mary's bash

Мы можем объединить имена пользователей в виде списка, разделенного запятыми.

pgrep bash -u дейв,мэри -l

Список двух пользовательских процессов bash PID

И мы можем попросить посмотреть все процессы для конкретного пользователя.

pgrep -u дейв -l

Список всех PID, принадлежащих конкретному пользователю

Чтобы увидеть полную командную строку, используйте параметр -a (полный список).

pgrep -u дейв -a

Использование параметра -a для отображения всей командной строки каждого процесса

Несколько слов о владении PID

Не все системные процессы принадлежат пользователю root. Многие, конечно, но не все. Например, эта команда работает:

pgrep avahi-демон

Но эта команда не работает.

pgrep -u корень авахи-демон

Это не удается, потому что root не владеет этим процессом. Фактический владелец — системный пользователь по имени «avahi». При использовании правильного имени пользователя команда работает.

pgrep -u авахи авахи-демон

Это небольшая проблема, на которую стоит обратить внимание.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

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

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