Кто или Какой процесс является родителем процесса INIT? INIT - это первый процесс, который инициализируется ядром, ядро не является одним процессом, так каково его значение идентификатора родительского процесса?
2 ответа
Согласно ps -ef
его идентификатор родительского процесса равен 0
.
Например:
$ ps -ef | head -4
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Mar14 ? 00:00:03 init [2]
root 2 0 0 Mar14 ? 00:00:00 [kthreadd]
root 3 2 0 Mar14 ? 00:00:17 [ksoftirqd/0]
Обычно говорят, что init
не имеет родителя и что, следовательно, значение PPID 0
является заполнителем, сигнализирующим, что у него нет родителя. В качестве альтернативы можно утверждать, что ядро является "родителем" init
и что 0
означает ядро.
На самом деле pid 0 - это планировщик ядра, поэтому родительский элемент init - это планировщик kenerl, который работает в режиме ядра. https://en.wikipedia.org/wiki/Process_identifier
Есть две задачи со специально выделенными идентификаторами процессов: swapper или sched имеет идентификатор процесса 0 и отвечает за подкачку страниц и фактически является частью ядра, а не обычным процессом пользовательского режима. Идентификатор процесса 1 обычно является процессом инициализации, главным образом ответственным за запуск и выключение системы. Первоначально, идентификатор процесса 1 не был специально зарезервирован для init никакими техническими мерами: он просто имел этот идентификатор как естественное следствие того, что ядро было первым процессом, вызванным ядром. Более поздние системы Unix обычно имеют дополнительные компоненты ядра, видимые как «процессы», и в этом случае PID 1 активно резервируется для процесса init, чтобы поддерживать согласованность со старыми системами. R работает в режиме ядра.