Skip to content

Процессы Linux

B Linux все процессы являются инстансами программ, выполняющихся в системе. Каждый процесс имеет уникальный идентификатор (PID), который используется для его определения. Эти процессы могут быть созданы в Linux с помощью функции fork(). Данная функция создает копию текущего процесса и возвращает значение 0 в новый процесс и PID нового процесса в родительский процесс.

PID 1, или init, является корневым процессом в системе Linux и отправной точкой (родительским процессом) для всех других процессов. Процесс init отвечает за инициализацию системы и запуск других процессов, которые, в свою очередь, запускают следующие процессы, и так далее. Все процессы, кроме init, форкаются от других процессов, а init как корневой процесс не имеет родителя и форкается во время загрузки ядра.

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

Процессы в Linux имеют статусы, которые определяют, выполняют они задачу в данный момент или нет.

Вот примеры статусов:

·   Работает (Running)

·   Ожидает ввода/вывода (Waiting)

·   Ожидает ресурса (Waiting on resource)

·   Засыпает (Sleeping)

·   Остановлен (Stopped)

·   Завершен (Zombie)

Системные вызовы

Системные вызовы являются интерфейсом между процессом и операционной системой. Они позволяют процессу запрашивать услуги у операционной системы и получать информацию о ее состоянии. Системные вызовы используются для выполнения операций, таких как IO(input, output) операции, создание процессов и межпроцессной коммуникации. Они являются основным способом, с помощью которого процесс взаимодействует с операционной системой.

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

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

Система управления процессами операционной системы отвечает за создание, уничтожение и планирование процессов. Она использует системные вызовы для создания новых процессов, завершения процессов и управления их выполнением. А также для распределения и освобождения памяти, управления дескрипторами файлов и синхронизации доступа к ресурсам системы.

В программах, написанных на языке Си, при вызове syscall обычно используется внешняя библиотека libc.

В программах, написанных на Golang, используются raw syscalls.

Где приложение напрямую обращается к ядру.

Немного о программе Strace

Strace в Linux — это программа, которая может показывать syscall, вызываемые в программе. Ты можешь запустить Strace с именем программы, которую хочешь отследить, чтобы получить список syscall, вызываемых в процессе работы этой программы. Например: strace ls

Также ты можешь увидеть системные вызовы для своей программы, написанной на Golang.