9 самых простых способов узнать идентификатор процесса (PID) в Linux

by itisgood

В основном, мы смотрим PID, чтобы убить невосприимчивую программу, и она похожа на диспетчер задач Windows.

Linux GUI также предлагает ту же функцию, но CLI – эффективный способ выполнения операции kill.

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

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

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

Процесс – это исполняемый экземпляр программы.

Каждый раз, идентификатор процесса будет получать изменения ко всем процессам, кроме init, поскольку init всегда является первым процессом в системе и является предком всех других процессов. Это PID – 1.
Максимальное значение PID по умолчанию – 32 768.
Это было проверено, выполнив следующую команду в системе
 # cat/proc/sys/kernel/pid_max
В 32-битных системах 32768 является максимальным значением, но мы можем установить любое значение до 2 ^ 22 (приблизительно 4 миллиона) в 64-битных системах.
Вы можете спросить, почему нам нужно такое количество PID? потому что мы не можем повторно использовать PID сразу. Также во избежание возможных ошибок.

PID для запущенных процессов в системе можно найти с помощью следующих девяти методов, таких как команда pidof, команда pgrep, команда ps, команда pstree, команда ss, команда netstat, команда lsof, команда fuser и команда systemctl.

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

В этом уроке мы рассмотрим идентификатор процесса Apache для проверки.

Метод-1: Использование команды pidof

pidof используется для поиска идентификатора процесса запущенной программы.

Он выводит эти идентификаторы на стандартный вывод.

Чтобы продемонстрировать это, мы узнаем идентификатор процесса Apache2 из системы Debian 9.

# pidof apache2
3754 2594 2365 2364 2363 2362 2361

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

Следовательно, нам нужно выяснить родительский PID (PPID), который мы ищем.

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

Способ-2: Использование команды pgrep

pgrep просматривает текущие процессы и перечисляет идентификаторы процессов, которые соответствуют критериям выбора для stdout.

# pgrep apache2
2361
2362
2363
2364
2365
2594
3754

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

В моем случае это 3754.

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

 

Метод-3: Использование команды pstree

pstree показывает запущенные процессы как дерево.

Дерево коренится либо в pid, либо в init, если pid опущен.

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

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

# pstree -p | grep "apache2"
           |-apache2(3754)-+-apache2(2361)
           |               |-apache2(2362)
           |               |-apache2(2363)
           |               |-apache2(2364)
           |               |-apache2(2365)
           |               `-apache2(2594)

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

# pstree -p | grep "apache2" | head -1
           |-apache2(3754)-+-apache2(2361)

Команда pstree очень простая, потому что она отдельно разделяет родительский и дочерний процессы

Метод-4: Использование команды ps

ps отображает информацию о выборе активных процессов.

Он отображает идентификатор процесса (pid = PID), терминал, связанный с процессом (tname = TTY), кумулятивное время процессора в формате [DD-] hh: mm: ss (time = TIME) и исполняемое имя (ucmd = ЦМД).

По умолчанию выходной файл не сортируется.

# ps aux | grep "apache2"
www-data  2361  0.0  0.4 302652  9732 ?        S    06:25   0:00 /usr/sbin/apache2 -k start
www-data  2362  0.0  0.4 302652  9732 ?        S    06:25   0:00 /usr/sbin/apache2 -k start
www-data  2363  0.0  0.4 302652  9732 ?        S    06:25   0:00 /usr/sbin/apache2 -k start
www-data  2364  0.0  0.4 302652  9732 ?        S    06:25   0:00 /usr/sbin/apache2 -k start
www-data  2365  0.0  0.4 302652  8400 ?        S    06:25   0:00 /usr/sbin/apache2 -k start
www-data  2594  0.0  0.4 302652  8400 ?        S    06:55   0:00 /usr/sbin/apache2 -k start
root      3754  0.0  1.4 302580 29324 ?        Ss   Dec11   0:23 /usr/sbin/apache2 -k start
root      5648  0.0  0.0  12784   940 pts/0    S+   21:32   0:00 grep apache2

Из вышеприведенного вывода мы можем легко идентифицировать идентификатор родительского процесса (PPID) на основе даты начала процесса.

В моем случае процесс apache2 был запущен @ Dec11, который является родителем, а другие – дочерними. PID apache2 равен 3754.

Метод-5: Использование команды ss

ss используется для вывода статистики сокетов.

Он позволяет отображать информацию, аналогичную netstat.

Он может отображать больше информации о TCP и состоянии, нежели другие инструменты.

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

# ss -tnlp | grep apache2
LISTEN     0      128         :::80                      :::*                   users:(("apache2",pid=3319,fd=4),("apache2",pid=3318,fd=4),("apache2",pid=3317,fd=4))

Метод-6: Использование команды netstat

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

По умолчанию netstat отображает список открытых сокетов.

Если вы не укажете каких-либо семейств адресов, будут выведены активные сокеты всех сконфигурированных семейств адресов.

Эта программа устарела. Замена для netstat – ss.

# netstat -tnlp | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      3317/apache2

Метод-7: использование команды lsof

lsof – список открытых файлов.

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

# lsof -i -P | grep apache2
apache2   3317             root    4u  IPv6  40518      0t0  TCP *:80 (LISTEN)
apache2   3318         www-data    4u  IPv6  40518      0t0  TCP *:80 (LISTEN)
apache2   3319         www-data    4u  IPv6  40518      0t0  TCP *:80 (LISTEN)

Метод-8: Использование команды fuser

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

# fuser -v 80/tcp
                     USER        PID ACCESS COMMAND
80/tcp:              root       3317 F.... apache2 
                     www-data   3318 F.... apache2
                     www-data   3319 F.... apache2

Метод-9: Использование команды systemctl

systemctl – Управление системой systemd и менеджером сервисов.

Это замена старого системного управления SysV и большинство современных операционных систем Linux были адаптированы systemd.

# systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Tue 2018-09-25 10:03:28 IST; 3s ago
  Process: 3294 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 3317 (apache2)
    Tasks: 55 (limit: 4915)
   Memory: 7.9M
      CPU: 71ms
   CGroup: /system.slice/apache2.service
           ├─3317 /usr/sbin/apache2 -k start
           ├─3318 /usr/sbin/apache2 -k start
           └─3319 /usr/sbin/apache2 -k start

Sep 25 10:03:28 ubuntu systemd[1]: Starting The Apache HTTP Server...
Sep 25 10:03:28 ubuntu systemd[1]: Started The Apache HTTP Server.

 

You may also like

Leave a Comment