Как найти pid процесса в Linux

Обновлено: 02.07.2024

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

Существует множество способов получить PID (идентификатор процесса) и PPID (идентификатор родительского процесса) данного процесса в Linux.

Команда Описание
pidof имя_процесса Работает с точным именем процесса
pgrep имя_процесса Возвращает PID всех совпадений
ps - o ppid= -p PID Получить PPID из PID
$$ PID текущего процесса/оболочки
$ PID родителя текущего процесса

Я подробно объясню эти команды, но перед этим кратко расскажу о процессе, PID и PPID.

Основы процессов Linux

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

Всем процессам, работающим в вашей системе, назначаются идентификаторы. Это может быть полезно, если вы хотите контролировать процесс (например, чтобы увидеть, сколько памяти или ЦП он использует), или, может быть, если вы хотите завершить его, если он начинает зависать или просто ведет себя немного странно.< /p>

Идентификаторы, которые прикрепляются ко всем этим процессам, называются PID и PPID.

Что такое PID?

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

Что такое PPID?

PPID очень тесно связан с PID. PPID означает "идентификатор родительского процесса", и, если вы его еще не получили, он просто означает процесс, который создал проверяемый вами процесс.

Например, предположим, что у нас есть два процесса. Один называется «spawner» и имеет идентификатор процесса (или PID) 7234. Наш второй процесс, «клиент электронной почты», имеет идентификатор процесса 7456, когда мы его создаем. Наша программа порождения запускает наш почтовый клиент, в результате чего наш почтовый клиент имеет PID 7456 и PPID 7234, поскольку спаунер (который имел PID 7234) породил почтовый клиент.

Теперь, когда вы усвоили основы, давайте посмотрим, как получить идентификатор процесса в Linux.

Получение PID процесса

Здесь важно знать имя процесса, PID которого вы хотите найти.

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

Легче сказать, чем сделать, потому что вы не всегда можете знать точное имя процесса. Хорошо, что команда pidof работает с завершением с помощью табуляции, поэтому, если вы знаете несколько начальных букв имени процесса, вы можете нажать табуляцию, чтобы получить соответствующие предложения.

Пример команда pidof, которая используется для поиска PID процесса в Linux

команда pidof работает с завершением табуляции

Однако это может не всегда работать, если имя процесса не соответствует тому, как вы думаете, что он называется. Например, процесс для браузера Edge в Linux называется msedge. Он не начинается с «края», и завершение табуляции не будет работать, если вы сосредоточитесь на «крае».

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

Существует специальная команда, сочетающая функции ps и команды grep, и неудивительно, что она называется pgrep :

pgrep command

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

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

команда pgrep пример

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

Вы можете использовать команду pstree, чтобы получить PID всех запущенных процессов в вашей системе Linux: pstree -p -a

Получение PPID из PID дочернего процесса

Как только вы узнаете PID процесса, найти PPID этого процесса не составит труда.

Вы можете просто запустить следующую команду, заменив PID идентификатором текущего (дочернего) процесса:

В оболочке приведенная выше команда и $ должны возвращать один и тот же вывод:


И это все, что нужно для поиска PID и PPID!

Проверка PID и PPID текущего процесса

Если вы работаете в такой оболочке, как Bash, очень легко найти PID и PPID вызывающего процесса (который обычно является оболочкой).

Bash сохраняет значение PID в переменной $$, а PPID — в переменной $:

Команды для поиска PID и PPID текущего процесса.

Таким образом, вы можете получить идентификатор процесса оболочки и подоболочки.

PID и PPID текущей оболочки

И это так просто! Найти PID и PPID других процессов тоже не намного сложнее.

Подведение итогов

Теперь вы должны знать все, что вам нужно, чтобы найти как PID, так и PPID для запуска процессов в вашей системе.

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

При работе в системе Linux иногда нужно выяснить, какие процессы запущены и какой PID или PPID к ним привязан. Его можно использовать для нескольких целей.

По сути, мы ищем PID в Linux, чтобы убить не отвечающую программу, что можно сделать с помощью диспетчера задач с графическим интерфейсом, но CLI — наиболее эффективный способ справиться с не отвечающей программой.

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

В этом руководстве мы покажем вам, как найти идентификатор процесса (PID) программы, запущенной разными способами в Linux.

Что такое идентификатор процесса (PID)?

PID относится к идентификатору процесса, который обычно используется в ядрах большинства операционных систем, таких как Linux, Unix, MacOS и Windows.

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

Что такое идентификатор родительского процесса (PPID)?

Родительский процесс — это процесс, создавший один или несколько дочерних процессов. Каждому дочернему процессу присваивается идентификатор родительского процесса (PPID), и родительский процесс уничтожает дочерний процесс, когда завершает свою операцию.

Возможно, вам будет интересно прочитать приведенные ниже статьи, так как они связаны с этой темой.

  • Как узнать, какой номер порта использует процесс в Linux
  • 3 простых способа убить или завершить процесс в Linux

Каждый раз при изменении идентификатора процесса для всех процессов, кроме init. Процесс инициализации всегда является первым процессом в системе и предком всех других процессов, он содержит PID 1.

Максимальное значение PID по умолчанию – 32 768 на 32-разрядной машине. И вы можете установить значение выше на 64-битных системах до 2^22 (приблизительно 4 миллиона). Это можно проверить, выполнив на своем компьютере следующую команду:

Вы можете спросить, зачем нам такое большое количество PID? Это связано с тем, что PID нельзя использовать повторно немедленно, а также для предотвращения возможных ошибок.

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

  • pidof: pidof — найти идентификатор процесса запущенной программы.
  • pgrep: pgre — поиск или сигнализация процессам на основе имени и других атрибутов.
  • ps: ps — отчет о снимке текущих процессов.
  • pstree: pstree — отобразить дерево процессов.
  • ss: ss используется для вывода статистики сокетов.
  • netstat: netstat отображает список открытых сокетов.
  • lsof: lsof — список открытых файлов.
  • fuser: fuser — список идентификаторов всех процессов, в которых открыт один или несколько файлов
  • systemctl: systemctl — управление системой systemd и диспетчером служб

Чтобы доказать это, мы собираемся найти идентификатор процесса Apache. Обязательно введите имя своего процесса вместо нашего.

1) Поиск идентификатора процесса (PID) с помощью команды pidof

Команда pidof используется для поиска идентификатора процесса запущенной программы. Он печатает эти идентификаторы в стандартный вывод. Чтобы продемонстрировать это, мы найдем идентификатор процесса «Apache2» в системе.

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

Итак, нам нужно найти PID родительского процесса (PPID), что мы и ищем. Это будет первое число. В моем случае это 3754, и они отсортированы по убыванию.

2) Как искать идентификатор процесса (PID) в Linux с помощью команды pgrep?

Команда pgrep просматривает запущенные в данный момент процессы и выводит список идентификаторов процессов, соответствующих критериям выбора.

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

Примечание. Идентификация идентификатора родительского процесса может быть проблематичной при использовании команд pidof и pgrep, поскольку каждый процесс имеет один PPID и несколько PID, между которыми нет четкой границы. Поэтому проявите осторожность при просмотре результатов.

3) определение идентификатора процесса (PID) с помощью pstree

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

pstree визуально объединяет идентичные ветки, заключая их в квадратные скобки и добавляя к ним префикс с количеством повторений.

Чтобы получить только родительский процесс, используйте следующий формат.

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

4) Как найти идентификатор процесса (PID) с помощью команды ps?

Команда ps отображает информацию о выбранных активных процессах, включая идентификатор процесса (pid=PID), терминал, связанный с процессом (tname=TTY), суммарное время ЦП в [DD-]чч:мм:сс формат (time=TIME) и имя исполняемого файла (ucmd=CMD). По умолчанию выходные данные не сортируются.

Идентификатор родительского процесса (PPID) можно легко определить по дате начала процесса из выходных данных выше. В нашем случае процесс «Apache2» был запущен 11 декабря и является родительским процессом, а остальные — дочерними процессами. PID Apache2 — 3754 .

5) Поиск идентификатора процесса (PID) с помощью команды ss

Команда ss используется для вывода статистики сокетов. Это позволяет отображать информацию, аналогичную netstat. Он может отображать больше информации о TCP и состоянии, чем другие инструменты.

Он может отображать статистику для всех типов сокетов, таких как PACKET, TCP, UDP, DCCP, RAW, домен Unix и т. д.

6) Поиск идентификатора процесса (PID) с помощью команды netstat

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

Если вы не укажете какие-либо семейства адресов, будут напечатаны активные сокеты всех настроенных семейств адресов. Эта программа устарела. Вместо netstat используется ss.

7) Как найти идентификатор процесса (PID) в Linux с помощью команды lsof?

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

8) Поиск идентификатора процесса (PID) с помощью команды fuser

Утилита fuser должна выводить в стандартный вывод идентификаторы процессов, запущенных в локальной системе, в которых открыт один или несколько именованных файлов.

9) Как найти идентификатор процесса (PID) в Linux с помощью команды systemctl?

Команда systemctl используется для управления диспетчером служб systemd. Это замена старого управления системой SysVinit, и большинство современных операционных систем Linux были перемещены в systemd.

Заключение

Мы показали вам несколько команд, позволяющих узнать PID конкретной запущенной программы в Linux.

При работе с операционной системой, такой как дистрибутивы Linux, ядро ​​создает процесс при запуске программы. Этот процесс сохраняет детали выполнения программы в памяти.

Как мы знаем, дистрибутивы Linux предназначены для многопоточных целей. Несколько процессов работают в фоновом режиме одновременно с присвоенными уникальными идентификаторами. Эти идентификаторы назначаются ядром автоматически и называются идентификаторами процессов (PID).

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

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

Вы также можете найти PID с помощью графического пользовательского интерфейса (GUI), но вы можете не получить список скрытых запущенных процессов с помощью инструментов на основе графического интерфейса.

Для получения PID запущенных процессов наиболее эффективным способом является интерфейс командной строки.

Как найти идентификатор процесса в Linux:

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

Например, мы покажем идентификатор процесса «VLC», но вы можете выбрать другой процесс.

Как найти идентификатор процесса (PID) с помощью команды «pidof»:

Получить PID запущенного процесса в терминале с помощью команды «pidof» — наиболее распространенный и простой способ.

Откройте терминал и следуйте указанному синтаксису команды «pidof», чтобы отобразить идентификатор процесса:

или чтобы получить PID "VLC", введите:


Как найти идентификатор процесса (PID) с помощью команды «pgrep»:

Команда «pgrep» — это еще одна утилита Linux, которая помогает найти PID запущенной программы. Чтобы получить PID «VLC» с помощью командной утилиты «pgrep», введите:


Как найти идентификатор процесса (PID) с помощью команды «lsof»:

Команда «lsof» представляет собой сокращенную форму команды «Список открытых файлов». Он используется для получения данных о файлах, открытых несколькими процессами.

Используйте его с командой «grep», чтобы получить PID «VLC» с данными файла:


Имейте в виду, что в большинстве случаев мы используем команду grep с несколькими инструментами командной строки. Цель состоит в том, чтобы команда «grep» нашла файл с заданным шаблоном строк и отобразила его.

Как найти идентификатор процесса (PID) с помощью команды «ps»:

Когда мы используем команду «ps», она выводит идентификатор запущенного процесса и считывает соответствующую информацию из файловой системы «/proc», содержащей виртуальные файлы.

Введите данную команду для отображения PID VLC:


(Вы можете подумать, почему мы использовали команду «ps» с параметром «aux». Помните об этом, мы будем использовать эту команду в конце статьи).

Как найти идентификатор процесса (PID) с помощью команды «pstree»:

Командная утилита «pstree» — эффективный способ отобразить иерархию запущенных процессов в формате дерева.

Введите команду «pstree», чтобы отобразить иерархию VLC, а также получить его PID:


На изображении показан родительский процесс с его дочерними процессами.

Если вы хотите отобразить только родительский процесс, используйте указанную команду:


Упомянутые выше подходы используются для отображения PID определенного процесса.

Если вы хотите отобразить список всех процессов, работающих в фоновом режиме, используйте команды «top» и «ps aux».

Как найти PID с помощью команды «top»:

Команда «top» отображает диспетчер задач, который содержит информацию об обработке всех запущенных процессов с их PID в системе Linux.

Введите «top» в терминале, чтобы получить список процессов:



Как найти PID с помощью команды «ps aux»:

Мы уже использовали «ps aux» с командой «grep» выше для отображения PID «VLC». Это было для конкретного процесса, поскольку мы использовали его с командой grep.

Если говорить о команде «ps aux», то это эффективный инструмент командной строки для мониторинга всех процессов, запущенных в операционной системе. Вы можете управлять информацией, связанной с процессом, после отображения списка. Он показывает имена процессов с их PID и использованием памяти.


Вывод:

Linux — многозадачная операционная система; несколько процессов выполняются одновременно с уникальными идентификаторами, называемыми PID. Из этой статьи вы узнали, как найти PID конкретного процесса с помощью различных подходов. Мы также проверили, как получить список всех запущенных процессов с помощью утилит командной строки «top» и «ps aux».

Об авторе

Администратор

Увлеченный пользователь Linux по личным и профессиональным причинам, всегда изучает новинки мира Linux и делится ими со своими читателями.

Вы можете легко остановить программу в терминале Linux, нажав клавиши Ctrl+C. Но часто бывает, что нужно «убить» не отвечающую программу. В Windows у вас есть диспетчер задач для этой ситуации. Вы также можете использовать диспетчер задач в Linux, но способ командной строки намного лучше и эффективнее для работы с неотвечающими программами.

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

Как завершить процесс в Linux

Если вы запускаете приложение, оно запускает какой-то процесс в фоновом режиме. Если вы хотите принудительно закрыть это приложение, вы можете завершить связанный с ним процесс.

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

Шаг 1. Найдите идентификатор процесса (PID) программы

Есть несколько способов найти PID процесса.

Если вы знаете имя процесса, вы можете использовать команду pidof следующим образом:

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

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

Если вы не знаете точное название программы, вы можете попробовать команду ps. Эта команда ps используется для просмотра запущенных процессов в системе. Вы можете использовать команду grep с именем программы (или с тем, что вы помните).

ps доп | grep -i «имя нужной программы»

Команда

ps aux возвращает все запущенные процессы в системе. И после этого grep показывает строку, совпадающую с названием программы. Вывод команды будет таким:

Как показано на рисунке выше, вы можете получить идентификатор процесса программы/процесса во втором столбце. Просто игнорируйте строку с «–color =auto».

Шаг 2. Завершите процесс с помощью PID

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

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

Вы также можете комбинировать команду kill с командой pidof, чтобы убить весь процесс программы.

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

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

Если вы знаете название программы, вы можете использовать великолепную команду killall и убить все процессы этой программы одной командой.

Как вы убиваете программы в Linux?

Надеюсь, это краткое руководство помогло вам. Какой ваш любимый способ убить программу в Linux? Диспетчер задач, kill, killall или xkill?

Читайте также: