Процессы в Linux
Для того чтобы эффективно управлять своим компьютером, вы должны доскональ но изучить свой сервер и работающие на нем процессы. Это поможет быстро увидеть в системе какие-либо аномалии.
Процесс — это программа или ее потомок. При запуске программы создается новый процесс, в котором и работает код. Каждая программа функционирует с определенными правами. Сервисы, которые активизируются при старте системы, обла дают правами root или nobody (без прав). Программы, которые выполняются из командной строки, наделены правами запустившего их пользователя, если не указан SUID- или SGID-бит, при котором программа имеет права владельца.
Процессы могут работать в двух режимах: фоновом (background) и центральном (foreground). Центральный режим для каждого терминала имеет только один процесс. Например, запустив по команде man ls программу для просмотра помощи, вы не сможете выполнять другие команды, пока не выйдете из программы man. Если ни один центральный процесс в терминале не запущен, то им является интерпретатор команд.
Cмена режима
Фоновыми процессами являются все сервисы. Они выполняют свои действия параллельно с вашей работой. Но и вы можете запустить любую программу в фоновом режиме. Для этого достаточно после указания команды через пробел поставить знак &. Например, выполните сейчас следующую команду:
В ответ на это вы не увидите файла помощи, а на экране появится только строка:
[1] 2802
После этого терминал снова готов работать, потому что центральный процесс запустил команду man is в фоновом режиме и свободен для выполнения новых директив.
В квадратных скобках показан порядковый номер фонового процесса, который мы запустили. Номера будут последовательно увеличиваться. В нашем случае это первая команда, поэтомув квадратных скобках стоит единица. Номер фонового процесса формируется для каждого пользователя. Если войти в систему через второй терминал и запустить какой-либо фоновый процесс, то вы увидите примерно следующее:
[1] 2805
В квадратных скобках опять число 1, а вот следующее значение отличается от выведенного на первом терминале. Это PID (Process ID, идентификатор процесса) созданного процесса, который является уникальным для всех пользователей.
Чтобы узнать, какие процессы у вас запущены, выполните команду jobs. В ответ на это вы получите:
[1] + Stopped man ls
Здесь мы видим, что процесс с номером [1] загружен в память, и состояние команды man is — Stopped (остановлен).
Какой смысл в том, что мы отправили просмотр файла помощи в фоновый режим? Я не зря выбрал эту команду, потому что в этом есть резон. Вы в любой момент можете сделать фоновый режим основным. Для этого необходимо ввести команду fg %1, где число 1 указывает номер вашего процесса, который вы видели в квадратных скобках. Попробуйте сейчас выполнить эту команду, и перед вами откроетсязапущенная программа man, отображающая файл помощи по использованию команды Is.
Раз процесс можно сделать центральным, значит, можно поступить и наоборот. Чтобы вернуть процесс в фоновый режим, нажмите комбинацию клавиш * + * — перед вами снова появится командная строка. Выполните команду *jobs*, чтобы убедиться, что команда *man ls* все еще работает.
Если в программе есть возможность выполнять системные команды, то вместо сочетания клавиш * + * можно выполнить команду *bg %1*. Число 1 — это снова номер процесса.
Остановка процессов
Чтобы прекратить работающий процесс, необходимо сделать его центральным и остановить штатными средствами. Чаще всего на экране есть подсказка, которая поможет выйти из программы. Если она отсутствует, то следует обратиться к документации ИЛИ просмотреть файл ПОМОЩИ, ВЫЗВаВ: man имя программы.
Сервисы могут работать только в фоне и не могут быть выведены на передний план. Для того чтобы их остановить, существуют специализированные команды, которые чаще всего имеют вид:
Иногда процессы зависают. Да, такие ситуации бывают и в ОС Linux. Центральный процесс может быть снят с помощью комбинации клавиш * + * или * +
*. Но этот метод срабатывает не во всех случаях и не для всех программ. Если не удается завершить процесс по-хорошему, то можно поступить иначе. Для этого существует команда kill. Чтобы отключить процесс по личному идентификатору (тому, что мы видели в квадратных скобках), используйте команду *kill* (Убить):
Параметр n нужно заменить номером процесса. Например, чтобы завершить работу фоновой программы man, нужно выполнить:
Затем сразу же запустите команду jobs. Вы должны увидеть на экране сообщение типа:
[1] + Terminated man ls
После повторного вызова команды jobs программы man больше не будет.
Если вы хотите завершить работу процесса, который запущен не вами, но вы знаете его PID, то нужно выполнить команду:
Знак процента в этом случае не нужен. Тогда команда kill ищет процесс, у которого PID равен указанному числу n, и посылает сигнал для завершения.
Просмотр процессов
С помощью команды jobs вы можете увидеть только запущенные вами процессы. Чтобы полюбопытствовать, чем в системе занимаются остальные пользователи, нужно выполнить команду ps.
Перед нами появится четыре колонки, которые показывают идентификатор процесса, терминал, на котором запущена программа, время работы и выполняемую команду.
Это далеко не полный список. Чтобы увидеть все процессы, необходимо выполнить команду ps с ключом -а. Но и это еще не будет весь перечень, потому что отобразятся только программы своего терминала. Если требуется полный список процессов, запущенных со всех терминалов, то нужно добавить ключ -х. Помимо этого, вы можете пожелать увидеть имя пользователя, под которым работает процесс, для этого добавьте ключ -u. В итоге исчерпывающую информацию можно получить, выполнив команду:
Результат работы будет таков:
- s (Sleeping) — спящий, это нормальное состояние для сервисов, которые просы паются только на редкие запросы клиентов;
- r (Runnable) — исполняемый в текущий момент;
- т (Traced or Stopped) — в состоянии отладки или остановлен;
- z (Zombied) — зависший. Такие процессы можно смело «убивать»;
- w — не имеет резидентных страниц;
- < — обладает высоким приоритетом;
- N — имеет низкий приоритет.
Это основные состояния, которые вы можете увидеть у процессов в своей системе.
Если в колонке Tty стоит вопросительный знак, то это означает, что процесс запущен еще на этапе загрузки системы и не принадлежит какому-либо терминалу.
Здесь показан всего лишь небольшой фрагмент файла. В реально работающей системе процессов очень много, и даже при минимальном количестве запущенных сервисов может не хватить одного экрана для отображения их всех. Я люблю сохранять результат работы в текстовый файл, а потом спокойно изучать его в любом редакторе. Для этого я выполняю команду:
Чтобы увидеть, чем в настоящий момент занимаются другие пользователи, можно выполнить команду w.
Очень удобно определять по списку, когда пользователь вошел в систему (колонка login@ ) и что он делает в настоящее время (колонка what).
Посмотрите на столбцы Jcpu и Pcpu — по ним можно оценить загрузку системы. Если ваш компьютер начал работать слишком медленно, то эти столбцы покажут, какой процесс отнимает много процессорного времени.
Команда ps выводит статическую информацию. Для наблюдения за нагрузкой системы удобнее использовать команду top. Она отображает список процессов, отсортированный по убыванию в зависимости от нагрузки. Здесь вы мржете увидеть, какой сервис или программа отнимают драгоценные ресурсы и не дают нормально работать с компьютером.
«Зомби»: поиск и устранение
Итак, у меня скрипты работают в постоянном режиме и создают новые процессы (дочерние), которые выполняют какие-то работы. Иногда бывает так, что дочерний процесс завершил свою работу, а родительский не видит этого и считает, что дочерний все еще работает. В системе образуются как бы «зомби» — которые не видят, что «тело уже умерло», и продолжают «дышать» и использовать ресурсы.
У меня все родительские процессы записывают себя в журнал в основном скрипте. Я знаю их ID, но не знаю, какой именно из дочерних завис или превратился в «зомби». Команда ps далеко не всегда показывает правильно такие проблемы.
В таких случаях я выполняю команду:
Эта команда выводит подробную информацию о выполняющихся сейчас процессах:
Самыми важными здесь являются вторая и третья колонки: PID (process ID) и PPID (parent process ID). Во второй строке в колонке PPID записано 702. Это значит, что процесс в этой строке является дочерним для процесса с PID, равным 702. Этот процесс можно увидеть в первой строке. Третья строка является дочерней для второй. То есть третий процесс — самый низший в иерархии.
Когда процессов много, то сразу так иерархию построить не получится. В этом случае можно фильтровать вывод с помощью следующей команды:
Здесь вы видите две команды, разделенные вертикальной чертой. Первая команда слева:
показывает подробную информацию о всех процессах. Вторая:
фильтрует вывод. И при этом показывает на экране только те строки, в которых есть текст ххх. В качестве этого ххх нужно указать ID родительского процесса.
Таким путем я иду от родительского процесса к дочерним и ищу самый последний из них. Когда нахожу последний, его и «убиваю» командой kill. Если не помогает, то «убиваю» предпоследний. Очень часто «убийство» последнего процесса не по могает, потому что он обычно уже реально не работает, а просто висит как фантом. А вот когда я «убиваю» предпоследний, то это видит вся цепочка дерева иерархии процессов.
Linux List Processes – How to Check Running Processes

Bolaji Ayodeji
Every day, developers use various applications and run commands in the terminal. These applications can include a browser, code editor, terminal, video conferencing app, or music player.
For each of these software applications that you open or commands you run, it creates a process or task.
One beautiful feature of the Linux operating system and of modern computers in general is that they provide support for multitasking. So multiple programs can run at the same time.
Have you ever wondered how you can check all the programs running on your machine? Then this article is for you, as I’ll show you how to list, manage, and kill all the running processes on your Linux machine.
Prerequisites
- A Linux distro installed.
- Basic knowledge of navigating around the command-line.
- A smile on your face 🙂
A Quick Introduction to Linux Processes
A process is an instance of a running computer program that you can find in a software application or command.
For example, if you open your Visual Studio Code editor, that creates a process which will only stop (or die) once you terminate or close the Visual Studio Code application.
Likewise, when you run a command in the terminal (like curl ifconfig.me ), it creates a process that will only stop when the command finishes executing or is terminated.
How to List Running Processes in Linux using the ps Command
You can list running processes using the ps command (ps means process status). The ps command displays your currently running processes in real-time.
To test this, just open your terminal and run the ps command like so:

This will display the process for the current shell with four columns:
- PID returns the unique process ID
- TTY returns the terminal type you’re logged into
- TIME returns the total amount of CPU usage
- CMD returns the name of the command that launched the process.
You can choose to display a certain set of processes by using any combination of options (like -A -a , -C , -c , -d , -E , -e , -u , -X , -x , and others).
If you specify more than one of these options, then all processes which are matched by at least one of the given options will be displayed.

The ps command manual page.
To display all running processes for all users on your machine, including their usernames, and to show processes not attached to your terminal, you can use the command below:
Here’s a breakdown of the command:
- ps : is the process status command.
- a : displays information about other users’ processes as well as your own.
- u : displays the processes belonging to the specified usernames.
- x : includes processes that do not have a controlling terminal.
This will display the process for the current shell with eleven columns:
- USER returns the username of the user running the process
- PID returns the unique process ID
- %CPU returns the percentage of CPU usage
- %MEM returns the percentage memory usage
- VSV returns the virtual size in Kbytes
- RSS returns the resident set size
- TT returns the control terminal name
- STAT returns the symbolic process state
- STARTED returns the time started
- CMD returns the command that launched the process.
How to List Running Processes in Linux using the top and htop Commands
You can also use the top task manager command in Linux to see a real-time sorted list of top processes that use the most memory or CPU.
Type top in your terminal and you’ll get a result like the one you see in the screenshot below:

An alternative to top is htop which provides an interactive system-monitor to view and manage processes. It also displays a real-time sorted list of processes based on their CPU usage, and you can easily search, filter, and kill running processes.
htop is not installed on Linux by default, so you need to install it using the command below or download the binaries for your preferred Linux distro.
Just type htop in your terminal and you’ll get a result like the one you see in the screenshot below:

How to Kill Running Processes in Linux
Killing a process means that you terminate a running application or command. You can kill a process by running the kill command with the process ID or the pkill command with the process name like so:
To find the process ID of a running process, you can use the pgrep command followed by the name of the process like so:
To kill the iTerm2 process in the screenshot above, we will use any of the commands below. This will automatically terminate and close the iTerm2 process (application).
Conclusion
When you list running processes, it is usually a long and clustered list. You can pipe it through less to display the command output one page at a time in your terminal like so:
or display only a specific process that matches a particular name like so:
I hope that you now understand what Linux processes are and how to manage them using the ps , top , and htop commands.
Make sure to check out the manual for each command by running man ps , man top , or man htop respectively. The manual includes a comprehensive reference you can check if you need any more help at any point.
Работа с процессами в Linux
Вывести на экран список текущих процессов, запущенных пользователем, можно командой:
Чтобы посмотреть список всех процессов с дополнительной информацией, вводим:
Мы увидим, примерно, следующее:
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:
ps aux | grep apache
Убить процесс
Останавливаем процесс по его PID:
Если процесс не завершается, убиваем его принудительно:
Остановить все процессы с именем nginx:
Как и в случае с kill, можно это сделать принудительно:
killall -9 nginx
Можно остановить все процессы конкретного пользователя:
Ищем процесс по имени, извлекаем его PID и завершаем его:
* обратите внимание, что запрос может вывести несколько процессов, которые будут попадать под критерии поиска — в таком случае, они будут завершены все.
Подробная информация о процессе
Для каждого процесса создается каталог по пути /proc/<PID>, в котором создаются папки и файлы с описанием процесса.
Примеры использования /proc/<PID>
Подробный вывод статуса:
Адрес в ячейках оперативной памяти, которые занял процесс:
Команда, которой был запущен процесс:
Символьная ссылка на рабочий каталог процесса:
Символьная ссылка на исполняемый файл, запустивший процесс:
Увидеть ссылки на дескрипторы открытых файлов, которые затрагивает процесс:
Подробное описание на сайте 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
ps — Process Status
![]()
ps command displays information related to the processes running in a Linux system.
PID — Unique process ID
TTY — Type of terminal that the user is currently logged in.
TIME — CPU time this process has consumed since it first started running. CMD — The command used to start the corresponding process.
ps with Arguments
If we pass arguments with a (-) dash then we will get the output in standard syntax. In contrast, if we pass arguments without any (-) dash then we will get output in BSD (Berkeley Software Distribution) syntax.
To view all running processes : ps -e or ps -A
To view full formated list of all running processes: ps -efL
We can use grep along with ps command to search for a specific process;
Let’s say we want to see our “httpd” server is running or not. We can do that in the following way:
To view all running processes by username and group:
To view the process tree. Within a process there can be multiple processes running, we can use ps -ejH to view the process tree:
In the above demonstration, we can see the process tree of the “sshd” process.
The most widely used ps command is ps aux : which will output all the running processes using the BSD syntax. The ps aux displays the most amount of information a user usually needs to understand the current state of their systems running processes.
ps aux provides additional information, such as :
%CPU CPU time used by this process (in percentage)
%MEM Physical memory used by this process (in percentage)
VSZ displays the amount of virtual memory being consumed by the process.
RSS is the actual physical wired-in memory that is being used.
START shows the date or time when the process was started.
TIME shows the total CPU time used by this process.
STAT displays the state of a process. The most common state codes are described below:
R: Running or runnable.
S: Interruptible sleep, waiting for an event to complete, such as input from
the terminal.
D: Uninterruptible sleep, processes that cannot be killed or interrupted with a signal, usually to make them go away you have to reboot or fix the issue.
Z: Zombies are terminated processes that are waiting to have their statuses collected.
T: Stopped, a process that has been suspended/stopped.
If you found this article helpful, please don’t forget to hit the Follow and Clap buttons to help me write more articles like this.
Thank You