- [How To] find process information in Linux (PID and more).
- The content of the article
- Find the Process ID (PID)
- Command ps
- Command pgrep
- Command pidof
- Command pstree
- Video
- Which process have locked the file
- Who used the file in Linux
- What process is using a port in Linux
- Conclusion
- Работа с процессами в Linux
- Список процессов
- Ключи
- Примеры
- Убить процесс
- Подробная информация о процессе
- Потребление ресурсов процессами
[How To] find process information in Linux (PID and more).
Each process in the operating system has its own unique identifier, by which you can get information about this process, as well as send it a control signal or complete it.
In Linux, name of this identifier is PID, and it can be recognized in several ways. In this article, we will discuss how to find out the PID of process, and why you might need it.
The content of the article
Find the Process ID (PID)
Command ps
The most common way to find out the Linux PID is to use the ps command: ps aux | grep name_of_process
$ ps aux | grep apache root 15778 0.0 0.4 204904 19008 ? Ss 23:25 0:00 /usr/sbin/apache2 -k start www-data 15780 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15781 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15782 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15783 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15784 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start root 15867 0.0 0.0 17484 888 pts/1 R+ 23:26 0:00 grep --color=auto apache
In addition, the command will also display the PID for grep, because the process was started during the search. To remove it, add the following filter: ps aux | grep name_of_process | grep -v grep
For example, let’s find the PID of all processes whose name contains the word “Apache”:
$ ps aux | grep apache | grep -v grep root 15778 0.0 0.4 204904 19008 ? Ss 23:25 0:00 /usr/sbin/apache2 -k start www-data 15780 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15781 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15782 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15783 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start www-data 15784 0.0 0.2 205248 9932 ? S 23:25 0:00 /usr/sbin/apache2 -k start
Command pgrep
If you do not need to see detailed information about the process, but only the PID is enough, you can use the pgrep utility:
$ pgrep apache 15778 15780 15781 15782 15783 15784
Command pidof
The pidof command searches for the PID of a particular process by its name. No occurrences, the process name should only match the desired one:
Using the -s option, you can ask the command to display only one PID:
$ pidof apache2 15784 15783 15782 15781 15780 15778 $ pidof -s apache2 15784
Command pstree
The pstree command allows you to view a list of child processes for a specific process, as well as their pid identifiers. For example, look at the Apache process tree:
$ pstree -p | grep apache2 |-apache2(15778)-+-apache2(15780) | |-apache2(15781) | |-apache2(15782) | |-apache2(15783) | `-apache2(15784)
Video
Which process have locked the file
Above, we looked at how to get the PID of a Linux process by name, and now let’s find out the PID from the file that the process uses. For example, we want to delete a file, and the system tells us that it is being used by another process.
With the help of the command lsof you can see which processes are using the directory or file at this moment. For example, open the audio file in the totem player, and then see which process uses its file:
At the beginning of the line we see the name of the program, and then comes its PID. There is another command that allows you to perform a similar task – it is a fuser:
Only the file and process PID will be displayed here. After the PID, there is one letter that indicates what this process does with the file or folder:
C – is the current directory;
r – is the root directory;
f – the file is open for reading or writing;
e – the file is executed as a program;
m – the file is included as a library.
Who used the file in Linux
To know the process that now locks the file is quite simple. But how do you know which process accesses a file for a long time, for example, executes it as a program or reads data from there? This task is more difficult, but completely solvable with the help of the auditd subsystem of kernel.In Ubuntu, it will have to be installed using the command:
Now create a rule for monitoring. For example, let’s track who runs the who utility:
auditctl -w /usr/bin/who -px -k who_exec
Here -w is the address of the file that we will be tracking, p is the action to be monitored, k is an arbitrary name for the rule. As an action, the following options can be used:
x – execution;
w – record;
r – reading;
a – change attributes.
Now we will perform a who once and see what happens in the log using the ausearch command :
sudo ausearch -i -k who_exec
Here in the SYSCALL section there is the PID of the process under which the program was launched, and also the PPID – the program that launched our who. We copy this PID and look at the information about it with the help of ps:
It becomes clear that this is bash.
What process is using a port in Linux
Sometimes you need to know the PID of a Linux program that uses a network port, for example 80. You can use the ss command to do this:
We see that these are several Apache processes. Using the dport option , you can find out which process is sending data to the specified port:
Conclusion
In this article, we looked at how to find out the PID process in Linux by various conditions: name or file. As you can see, everything is quite simple, and in a few minutes, you can understand what is happening with your operating system, and what process is responsible for it.
Работа с процессами в Linux
Обновлено: 29.03.2023 Опубликовано: 09.11.2017
Список процессов
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 — не имеет резидентных страниц;
- < —высоко-приоритетный;
- N — низко-приоритетный;
- L — имеет страницы, заблокированные в памяти.
- START — дата запуска процесса.
- TIME — время запуска процесса.
- COMMAND — команда, запустившая процесс.
Ключи
Ключ | Описание |
---|---|
-A | Все процессы. |
-a | Запущенные в текущем терминале, кроме главных системных. |
-d | Все, кроме главных системных процессов сеанса. |
-e | Все процессы. |
f | Показать дерево процессов с родителями. |
T | Все на конкретном терминале. |
a | Все, связанные с текущим терминалом и терминалами других пользователей. |
r | Список только работающих процессов. |
x | Отсоединённые от терминала. |
u | Показать пользователей, запустивших процесс. |
Примеры
Поиск процесса с помощью grep:
Убить процесс
Останавливаем процесс по его PID:
Если процесс не завершается, убиваем его принудительно:
Остановить все процессы с именем nginx:
Как и в случае с kill, можно это сделать принудительно:
Можно остановить все процессы конкретного пользователя:
Ищем процесс по имени, извлекаем его PID и завершаем его:
kill `ps aux | grep ‘apache’ | awk »`
* обратите внимание, что запрос может вывести несколько процессов, которые будут попадать под критерии поиска — в таком случае, они будут завершены все.
Подробная информация о процессе
Для каждого процесса создается каталог по пути /proc/ , в котором создаются папки и файлы с описанием процесса.
Примеры использования /proc/
Адрес в ячейках оперативной памяти, которые занял процесс:
Команда, которой был запущен процесс:
Символьная ссылка на рабочий каталог процесса:
Символьная ссылка на исполняемый файл, запустивший процесс:
Увидеть ссылки на дескрипторы открытых файлов, которые затрагивает процесс:
Подробное описание на сайте man7.org.
Потребление ресурсов процессами
Для просмотра статистики потребления ресурсов используем утилиту top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21059 root 20 0 157884 2280 1496 R 18,8 0,1 0:00.03 top
1 root 20 0 190996 2964 1652 S 0,0 0,1 6:49.99 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:01.78 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:24.75 ksoftirqd/0
5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H
- PID — идентификатор процесса.
- USER — имя учетной записи, от которой запущен процесс.
- PR — приоритет процесса.
- NI — приоритет, выставленной командой nice.
- VIRT — объем виртуальной памяти, потребляемый процессом.
- RES — объем используемой оперативной памяти.
- SHR — количество разделяемой памяти, которое используется процессом.
- S — состояние процесса.
- %CPU — процент использования процессорного времени.
- %MEM — потребление оперативной памяти в процентах.
- TIME — использование процессорного времени в секундах.
- COMMAND — команда, которая запустила процесс.