Урок 5: Что такое процесс? /proc и структура памяти
Процесс — это программа в исполнении, не двоичный файл на диске, а его живой экземпляр с памятью, файловыми дескрипторами и состоянием. В NVIDIA каждое приложение CUDA — это процесс со своим контекстом GPU. Когда GPU зависает, ps aux | grep cuda находит PID, а /proc/<pid>/maps показывает, отобразила
Процесс похож на сотрудника, выполняющего задачу: двоичный файл — это резюме, написанное на бумаге, а процесс — это реальный сотрудник, сидящий за столом, использующий компьютер и общающийся с другими. /proc — это доска управления, показывающая каждого сотрудника и то, что он делает.
- Процесс (process)
- Работающий экземпляр программы. Каждый процесс получает уникальный PID, отдельное адресное пространство, файловые дескрипторы и состояние CPU. Разные процессы не разделяют память напрямую.
- PID (идентификатор процесса)
- Уникальное целое число, которое ядро назначает каждому процессу. PID 1 — это всегда init/systemd. /proc/<pid>/ содержит всю информацию о процессе.
- PPID (идентификатор родительского процесса)
- PID родительского процесса, создавшего текущий процесс. Каждый процесс создаётся другим процессом (кроме init). PPID=0 указывает, что процесс создало ядро.
- Состояние процесса
- Текущее состояние процесса: R (Running/Runnable), S (Sleeping — ожидание I/O), D (Uninterruptible sleep — ожидание ядра), Z (Zombie — завершился, но родитель не выполнил очистку), T (Stopped).
- Файловая система /proc
- Виртуальная файловая система, которую ядро генерирует в памяти. Каждый /proc/<pid>/ — это каталог, содержащий актуальную информацию о процессе: status, maps, fd, cmdline и другое.