linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Процессы и ресурсы/process-and-pid

kb/processes ── Процессы и ресурсы ── beginner

Процесс и PID

Процесс - это запущенная программа со своим PID, памятью, открытыми дескрипторами и UID. Все процессы образуют дерево, корень - init (PID 1).

view as markdownaka: process, pid, ppid

Что такое процесс

Процесс - это выполняющийся экземпляр программы. У него есть:

  • PID (Process ID) - уникальный числовой идентификатор
  • PPID (Parent PID) - кто его породил
  • UID/GID - от чьего имени работает (см. file-permissions)
  • Виртуальное адресное пространство - heap, stack, mmap'ы, общие библиотеки
  • Открытые файловые дескрипторы (/proc/<pid>/fd/*)
  • Текущий рабочий каталог (cwd)
  • Контроллер группы (cgroups) и набор namespaces - что он видит

fork + exec

Новый процесс в Linux всегда создаётся одной из этих пар системных вызовов:

  • fork() - клонировать текущий процесс. Получаем дочерний с тем же кодом и состоянием, но новым PID
  • exec*() - заменить в текущем процессе код+данные на содержимое бинаря; PID сохраняется

Так шелл запускает команду: fork() → дочерний процесс делает exec("/bin/ls"). Родитель ждёт через wait().

Дерево процессов

Все процессы - потомки одного: PID 1 (init, на современных системах это systemd). Если родитель умрёт раньше потомка, потомок «усыновляется» PID 1.

systemd
 ├─ sshd
 │   └─ sshd: alice@pts/0
 │       └─ bash
 │           └─ vim
 ├─ docker
 └─ ...

/proc/<pid> - анатомия процесса

В Linux каждый живой процесс - это директория /proc/<pid>/:

  • cmdline - что было в argv
  • exe → symlink на бинарь
  • cwd → symlink на CWD
  • fd/ - все открытые файловые дескрипторы (как symbolic-link на цели)
  • status - карточка с метаданными (UID, threads, memory)
  • cgroup - в каком cgroup'е находится процесс
  • ns/ - какие namespaces видит

Состояния процесса

  • R (Running/Runnable) - на CPU или в очереди ожидания CPU
  • S (Sleeping) - ждёт события (interruptible: можно прервать сигналом)
  • D (Uninterruptible Sleep) - ждёт I/O в kernel-mode, нельзя прервать. Высокая доля D обычно значит проблемы с диском/NFS, и она тянет load-average вверх
  • Z (Zombie) - завершился, но родитель ещё не сделал wait() - занимает PID но не RAM
  • T (Stopped) - приостановлен сигналом SIGSTOP или Ctrl+Z

§ команды

bash
ps -ef | head

Все процессы в системе с PID, PPID, UID, командой

bash
ps -p $$ -o pid,ppid,comm,state

Информация о текущем шелле ($$ = PID шелла)

bash
pstree -p

Дерево процессов с PID-ами

bash
cat /proc/$$/status | head -10

Карточка текущего шелла из /proc

bash
ls -l /proc/self/fd/

Открытые file descriptors процесса (`self` всегда указывает на читающий)

§ см. также

  • signalsСигналы (SIGTERM, SIGKILL, SIGHUP)Сигнал - асинхронное уведомление процессу от ядра или другого процесса. TERM - попроси завершиться, KILL - убей сразу, HUP - перечитай конфиг.
  • cmd-psps - снимок процессовps - снимок процессов в момент вызова. Два диалекта: BSD (`aux`, без дефиса) и UNIX (`-ef`, с дефисом). `-o` задаёт колонки. Для непрерывного просмотра - [[cmd-htop|htop]].
  • cmd-htophtop - интерактивный монитор процессовhtop - интерактивный TUI-монитор процессов. F-keys: F3 поиск, F4 фильтр, F5 дерево, F6 сортировка, F9 kill. Цветовые столбцы наверху, список внизу. Замена top'а везде, где доступен.
  • cgroupscgroups (v2)cgroups v2 - иерархическая виртуальная FS под `/sys/fs/cgroup` через которую ядро лимитирует CPU/память/I/O процессов. Docker/k8s/systemd пишут сюда.
  • namespacesLinux namespacesNamespaces - механизм ядра, который даёт процессу собственный изолированный view на ресурс (сеть, mount-points, PID, UID, IPC, hostname, time). На них построены все контейнеры.
  • cmd-stracestrace - какие syscall'ы делает процесс`strace` показывает в реальном времени какие системные вызовы делает процесс и с какими аргументами. Главный инструмент когда «процесс молчит».

§ упоминается в уроках

  • ›advanced-02-cgroups-v2
  • ›advanced-06-ebpf-trace
  • ›advanced-07-perf-and-flame
  • ›beginner-01-filesystem
  • ›beginner-02-directory-tree
  • ›beginner-04-pipes-and-redirects
  • ›beginner-05-permissions
  • ›beginner-06-users-and-groups
  • ›beginner-07-processes-and-signals
  • ›beginner-09-environment-and-shell
  • ›beginner-12-shell-scripting
  • ›intermediate-07-debugging-with-proc
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки