Процессы 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.