Intereting Posts
Выполнить команду в другом терминале Скрыть отдельный указательный указатель (из-за мерцания) в KDE в настройке двойного указателя с сенсорным экраном Что такое консультативная блокировка файлов, которые обычно используют системы Unix? «Кто мама любит» настоящую команду linux? Что такое флаг для загрузки скрытых файлов с помощью wget? Как редактировать / var / www файлы с помощью phpstorm? Что может заставить vim не сохранять историю команд? Переадресация X11 через SSH и su Перезапустить сетевой интерфейс – Angstrom linux Создание блочного устройства из файлов Таблица использования процессора консоли Печать и удаление первой строки файла с помощью `sed` Действительно ли rsync или duplicity записывают файлы на смонтированном хранилище? Получите реальный, видимый размер папки Помощь с компиляцией bash из источника в пользовательском настраиваемом профиле env не читается

процесс init: предок всех процессов?

Я всегда узнал, что процесс init является предком всех процессов. Почему у процесса 2 есть PPID 0?

$ ps -ef | head -n 3 UID PID PPID C STIME TTY TIME CMD root 1 0 0 May14 ? 00:00:01 /sbin/init root 2 0 0 May14 ? 00:00:00 [kthreadd] 

Во-первых, «предок» – это не то же самое, что «родитель». Предком может быть родительский родительский родительский родитель, а ядро ​​отслеживает только один уровень. Однако, когда процесс умирает, его дети принимаются init, поэтому вы увидите много процессов, чей родительский 1 на типичной системе.

Современные Linux-системы дополнительно имеют несколько процессов, которые выполняют код ядра, но управляются как процессы пользователя, в том, что касается планирования. (Они не подчиняются обычным правилам управления памятью, так как они запускают код ядра.) Эти процессы kthreadd (это init потоков ядра). Вы можете распознать их по их идентификатору родительского процесса (2) или, как правило, по тому факту, что ps перечисляет их с именем между квадратными скобками или тем фактом, что /proc/2/exe (обычно символическая ссылка на исполняемый файл процесса) невозможно прочитать.

Процессы 1 ( init ) и 2 ( kthreadd ) создаются непосредственно ядром во время загрузки, поэтому у них нет родителя. Значение 0 используется в их ppid-поле, чтобы указать это. Думайте о 0 как о значении «ядро» здесь.

Linux также имеет некоторые возможности для ядра запускать пользовательские процессы, местоположение которых указывается с помощью параметра sysctl в определенных обстоятельствах. Например, ядро ​​может инициировать события загрузки модуля (например, при обнаружении нового оборудования или при использовании некоторых сетевых протоколов), вызывая программу в kernel.modprobe sysctl kernel.modprobe . Когда программа сбрасывает ядро, ядро ​​вызывает программу, указанную kernel.core_pattern если она есть.