Насколько я понимаю, это fork
системный вызов, который создает новый процесс путем клонирования родительского процесса. Чем создается родительский процесс? Если используется библиотека C для создания нескольких процессов, какой системный вызов был для создания первого процесса? Например, при запуске./main.o
решение1
Само ядро содержит внутренний вызов для execve()
создания процесса 1 (init), который никогда не завершается.
Init() — корень всего дерева процессов. Он начинается с разветвления процессов для всех известных служб и других настроенных задач, а также для всех устройств входа.
решение2
Когда вы запускаете свою программу из оболочки, то оболочка является ее родительским процессом.
Оболочка вызывает fork()
создание нового дочернего процесса, а затем в этом новом процессе вызывает один из процессов exec()
семейства, чтобы начать выполнение вашей программы.
Если ваша программа запускается каким-либо другим (не оболочкой) процессом, последовательность будет такой же.
Очевидно, что это должно где-то начаться: конечным предком всех процессов является процесс init
(PID 0), который магическим образом запускается ядром для запуска пользовательского пространства.