Linux get all pids

Как узнать PID процесса в Linux

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

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

Как узнать pid процесса Linux

Самый распространённый способ узнать PID Linux — использовать утилиту ps:

ps aux | grep имя_процесса

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

ps aux | grep имя_процесса | grep -v grep

Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:

ps aux | grep apache | grep -v grep

2. pgrep

Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:

По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:

3. pidof

Эта утилита ищет PID конкретного процесса по его имени. Никаких вхождений, имя процесса должно только совпадать с искомым:

С помощью опции -s можно попросить утилиту выводить только один PID:

pidof -s apache2

4. pstree

Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:

pstree -p | grep apache2

Как узнать PID скрипта

Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:

#!/bin/bash
echo «PID этого скрипта: $$»

Каким процессом занят файл Linux

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

С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:

В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:

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

  • c — текущая директория;
  • r — корневая директория;
  • f — файл открыт для чтения или записи;
  • e — файл выполняется как программа;
  • m — файл подключен в качестве библиотеки.

Кто использовал файл в Linux

Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:

Читайте также:  Вышло новое обновление windows 10 2021

sudo apt install auditd

Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:

auditctl -w /usr/bin/who -p x -k who_exec

Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:

  • x — выполнение;
  • w — запись;
  • r — чтение;
  • a — изменение атрибутов.

Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:

sudo ausearch -i -k who_exec

Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:

ps aux | grep 15595

Становиться понятно, что это bash.

Какой процесс использует порт в Linux

Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:

sudo ss -lptn ‘sport = :80’

Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:

sudo ss -lptn ‘dport = :80’

Выводы

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

Источник

How to find the Process ID of a program in Linux

When working on a Linux system, sometimes you need to figure out what processes are running and which PID or PPID is tied to it. It can be used for several purposes.

Basically, we search for a PID in Linux to kill an unresponsive program, which can be done by the GUI task manager, but CLI is the most efficient way to handle unresponsive programs.

This is better than the GUI, because sometimes GUI-based tools may not show the still running hidden process.

In this tutorial, we will show you how to find the process ID (PID) of a program running in many ways in Linux.

What is process ID (PID)?

PID refers to process ID, which is commonly used by most operating system kernels, such as Linux, Unix, MacOS and Windows.

This is a unique ID that is automatically assigned to each process when it is created. A process is a running instance of a program.

What is parent process ID (PPID)?

A parent process is a process that has created one or more child processes. Each child process is given a Parental Process ID (PPID), and the parent process kills the child when it completes their operation.

You may be interested to read the below articles, as these are related to this topic.

Each time the process ID is changed for all processes except init. The init process is always the first process in the system and the ancestor of all other processes, it holds PID 1.

The default maximum value of PIDs is 32768 on 32-bit machine. And you can set the value higher on 64-bit systems up to 2^22 (approximately 4 million). This can be verified by running the following command on your machine:

You may ask, why do we need such large number of PIDs? This is because PIDs cannot be reused immediately and also to prevent potential errors.

You can find the PID of processes running on the system using the below nine command.

  • pidof: pidof – find the process ID of a running program.
  • pgrep: pgre – look up or signal processes based on name and other attributes.
  • ps: ps – report a snapshot of the current processes.
  • pstree: pstree – display a tree of processes.
  • ss: ss is used to dump socket statistics.
  • netstat: netstat is displays a list of open sockets.
  • lsof: lsof – list open files.
  • fuser: fuser – list process IDs of all processes that have one or more files open
  • systemctl: systemctl – Control the systemd system and service manager
Читайте также:  Tweak tool kali linux

To prove this, we are going to find the Apache process ID. Make sure to enter your process name instead of ours.

1) Finding a process ID (PID) with pidof command

The pidof command is used to find the process ID of the running program. It prints those IDs into the standard output. To demonstrate this, we will be finding the ‘Apache2’ process id in the system.

In the above output you may have difficulties identifying the process ID because it displays all PIDs (including parent and child) against the process name.

So we need to find the Parent Process PID (PPID), which is what we are looking for. This will be the first number. In my case it is 3754 and it is sorted in descending order.

2) How to search a process ID (PID) in Linux, using pgrep command?

The pgrep command looks at the processes currently running, and lists the process IDs that match the selection criteria.

The above output is similar to the ‘pidof’ command output, but it sorted the results in ascending order, which clearly shows that the parent process PID is standing at last.In my case it is 3754 .

Note: Identifying the parent process ID can be problematic when using the ‘pidof’ & ‘pgrep’ command, as each process comes with a single PPID and multiple PIDs which doesn’t show a clear demarcation between them. Hence please exercise caution while looking at the results.

3) locating a process ID (PID) with pstree

The pstree command shows running processes as a tree-like format which is very convenient way to display the process hierarchy and makes the output more visually appealing. If a user name is specified in the pstree command then it shows all the processes owned by the respective user.

pstree visually merges identical branches by putting them in square brackets and prefixing them with the repetition count.

To get only the parent process, use the following format.

‘pstree’ command is much better than the ‘pidof’ & ‘pgrep’ commands, because it separates parent from the child processes which is not possible by them.

4) How to find a process ID (PID) using ps command?

The ps command displays information about a selection of the active processes which includes the process ID (pid=PID), terminal associated with the process (tname=TTY), cumulated CPU time in [DD-]hh:mm:ss format (time=TIME), and executable name (ucmd=CMD). Output is unsorted by default.

The Parent Process ID (PPID) can be easily identified based on the process start date from the above output. In our case the ‘Apache2’ process started on December 11th , which is the parent process and the others are the child processes. The PID of Apache2 is 3754 .

5) Finding a process ID (PID) using ss command

The ss command is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state information than other tools.

It can display stats for all kind of sockets such as PACKET, TCP, UDP, DCCP, RAW, Unix domain, etc.

6) Finding a process ID (PID) with netstat command

The netstat command is used to print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships. By default, netstat displays a list of open sockets.

If you don’t specify any address families, then the active sockets of all configured address families will be printed. This program is obsolete. Replacement for netstat is ss.

7) How to find a process ID (PID) in Linux, using lsof command?

The lsof command is used to list open files. The Linux lsof command lists information about files that are open by processes running on the system.

8) Searching a process ID (PID) using fuser command

The fuser utility shall write to standard output, the process IDs of processes running on the local system that have one or more named files open.

Читайте также:  Iphone screen mirroring windows

9) How to find a process ID (PID) in Linux, using systemctl command?

The systemctl command is used to control the systemd service manager. This is a replacement for the old SysVinit system management, and most of the modern Linux operating systems have been moved to the systemd.

Conclusion

We have shown you several command to find out the PIDs of a specific running program in Linux.

If you have questions, feel free to leave a comment below.

Источник

linux-notes.org

Утилита pidstat– это сокращение от PID Statistics (статистика по PID) и входит в sysstat пакет и используется для мониторинга процессов в режиме реального время. Это инструментальное средство выдает различные статистические данные по процессу, в том числе об использовании процессора, об использовании процессом дискового пространства, о потоках, связанных с выбранными задачами и дочерними процессами.

По умолчанию, данная утилита не поставляется с Unix/Linux и ее нужно будет установить. pidstat является частью Sysstat пакета, который содержит различные инструменты производительности системы для Linux, она доступна в репозитории большинства дистрибутивов Linux.

Установка pidstat в CentOS/Fedora/RedHat

Установка pidstat в Debian/Ubuntu/Mint

Установка pidstat в других Unix/Linux ОС

Сейчас будем собирать с исходного кода:

Использование pidstat в CentOS/Fedora/RedHat

Запуск pidstat без какого-либо аргумента равносильно «-p ALL» аргументу:

Вывод можно получить следующий:

  • PID — Идентификационный номер задачи (процесса).
  • %usr -Процент CPU, который использовался при выполнении задачи на уровне пользователя (приложения) с или без «»nice приоритета. Обратите внимание, что это поле не включает время, затраченное на работу виртуального процессора.
  • %system — Процент CPU, используемый при выполнении задачи на системном уровне.
  • %guest — Процент CPU, используемый при выполнении задачи на виртуальной машине (работает виртуальный процессор).
  • %CPU — Сумарный процент CPU времени на потраченную задачу. В среде SMP, использование процессора на задачу будет разделена на общее число процессоров.
  • CPU — номер процессора, к которому прикреплена задача.
  • Command — Имя команды.

Так же, можно посмотреть общее количество процессов:

Можно узнать информации по определенному PID:

Просмотр I/O статистики

Мы можем использовать pidstat утилиту чтобы получить статистику ввода/вывода для некоторого процесса, используя флаг «-d». Для примера:

  • kB_rd/s — Это количество килобайтов когда процесс считал данные с диска за секунду.
  • kB_wr/s -Это количество килобайтов когда процесс считал или считает данные с диска за секунду.
  • kB_ccwr/s -Это количество килобайтов когда записи на диск былы отменены задачей.

Получить ошибки страниц и использование RAM

статистику использования оперативной памяти

Используйте «-r» опцию чтобы получить статистику об использования оперативной памяти и ошибок страниц:

  • minflt/s — Общее число незначительных сбоев, когда задача выполнялась каждую секунду и не требуют загрузки страничной памяти с диска.
  • majflt/s — Общее число незначительных сбоев, когда задача выполнялась каждую секунду и требуют загрузки страничной памяти с диска.
  • VSZ — Virtual Size: Виртуальное использование памяти для всех задач в килобайтах.
  • RSS — Resident Set Size: Использование физической памыти, но не свапа ( non-swapped) в килобайтах.

Отображение статистики по эффективности на основе имени процесса:

Можно повторять выдачи результата через определенный интервал времени (например 3 секунды):

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

Однако при использовании опции «-l», можно будет просмотреть полный путь к команде и все его аргументы, как показано ниже:

Используя опцию «-t», можно вывести на экран вывод в виде tree (дерева), как показано ниже:

Можно использовать pidstat чтобы найти утечку памяти, используя следующую команду:

Будет показано 5 отчетов в промежуточным временем 2 секунды на отчет о текущей статистики страницы неисправностей.

Чтобы посмотреть подкачку для определенного процесса, используем:

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

Однако, если вы хотите, видеть всю статистику в горизонтальном виде и на одной строке для отдельного процесса, используйте опцию «-h», как показано ниже:

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

Вот и все, статья «Утилита pidstat в Unix/Linux» завершена.

Источник

Оцените статью