tgoop.com/careerunderhood/309
Last Update:
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 4. Процессы в Linux
После небольшой паузы продолжаю цикл постов. Сегодня поговорим о том как в Linux и Unix обстоят дела с процессами. Основные определения разобраны в прошлом посте, здесь сфокусируемся на специфике в Linux и Unix.
Факт №1. Каждый процесс в UNIX и Linux имеет Process ID или PID - идентификатор процесса в ОС. ОС гарантирует что только один процесс в момент времени закреплен за конкретным идентификатором. PID имеет тип данных Int а диапазон допустимых знаений - [0, /proc/sys/kernel/pid_max].
Факт №2. Иерархия процессов в Unix / Linux - древовидная. Есть процессы-родители а есть процессы-потомки, при этом процессы-потомки также могут быть родителями, то есть дерево может иметь большое количество уровней.
Факт №3. Для коммуникации между ОС и процессами а также для процессов между собой существует механизм сигналов - однонаправленная асинхронная комуникация.
Факт №4. Если родительский процесс умирает то дочерний процесс остается жить, но его усыновляет один из корневых процессов операционной системы. Важно это учитывать при создании многопроцессной программы чтобы избежать утечек.
Факт №5. Если родительский процесс не обрабатывает сигналы посылаемые ему от дочерних процессов то может наступить момент когда все процессы потомки превратились в "зомби процессы".
Факт №6. Для взаимодействия с ресурсами процессы всегда используют системные вызовы.
В Linux Kernel API доступно несколько syscall для работы с процессами:
- семейство вызовов exec для замещения одного процесса другим (process ID остается неизменным, но при этом все ресурсы текущего процесса заменяются новосозданным)
- системный вызов clone для создания клона текущего процесса. Самый важный системный вызов в контексте многопроцессности.
- fork и vfork для создания дочернего процесса. Используют под капотом тот самый системный вызов clone.
Bonus: библиотека POSIX для создания потоков под капотом использует ту же функцию clone и что и функция fork. Получается что потоки в Linux это процессы? Или все таки нет? Ответ на этот вопрос будет в следующем посте завтра 😊
-----
Напоминаю, что моя личка открыта для всех, а если в личку неудобно то можно написать через Google Forms.
Предлагайте темы для будущих постов, задавайте вопросы или оставляйте отзывы/пожелания.😊
BY Евгений Козлов пишет про IT
Share with your friend now:
tgoop.com/careerunderhood/309