Далі: Настройка init для старту
Вгору: init
Назад: init
init приходить першим
init - це одна з тих абсолютно необхідних програм, які
життєво необхідні для роботи Лінакса. Але Ви можете абсолютно
забути про init і не турбуватися про його роботу. Добре
відлагоджена (куплена чи іншим чином придбана) версія Лінакса
постачається з конфіґурацією init 'а, яка буде добре
працювати з більшістю систем. В таких системах робити будь-яку
настройку для init 'а абсолютно непотрібно. Про
init згадують тільки тоді, коли через послідовний порт
або модем треба підключити до системи термінал, щоб
підключатися до своєї системи ззовні (але не для того, щоб
дзвонити з свого комп'ютера на інший), або ж тоді, коли треба
змінити стартовий робочий рівень.
Після того, як ядро стартувало себе (тобто прочитане в
пам'ять, почало працювати та провело ініціалізацію драйверів
та структур даних), воно (ядро) закінчує роботу над самим
собою і завершує процес старту системи, запускаючи на
виконання процес, що відноситься до користувацього рівня
роботи 137 - процес init . Таким
чином, процес init - це завжди самий перший процес
користувацького рівня роботи (номер процесу init 'а
завжди є 1).
Ядро шукає init в кількох місцях - тих які в минулому
використовувалися для нього. Але вірне місце для
init 'а в Лінаксі - це /sbin/init . Якщо ядро не може
запустити init , воно намагається стартувати
/bin/sh , і якщо навіть це не спрацьовує, система
здається і її старт не відбувається.
Колии init починає свою роботу, він продовжує початий
ядром процес загрузки. init виконує деякі
адміністративні кроки, такі, як перевірка файлових систем,
очистка /tmp , запускає різноманітні сервіси системи та
стартує getty для кожного терміналу та віртуальної
консолі, на яких дозволена робота користувачам
(див. розділ ).
Після того, як із стартом системи закінчено, init
слідкує за терміналами. Коли один з користувачів закінчує
роботу на терміналі, init перезапускає getty на
цьому терміналі, щоб в системі міг зареєструватися наступний
користувач. Крім того init усиновлює процеси-сироти.
Коли один процес стартує інший процес, то цей другий процес
називається дитиною першого. Якщо процес-батько вмирає
(закінчує свою роботу) раніше, ніж помре його дитина, процес
init миттєво усиновлює цю дитину - вона стає дитиною
init 'а. Пояснення цього дуже технічне, але варто про це
знати, оскільки це дає розуміння списків процесів і графів
дерев процесів.138
Існує кілька різних варіатів init 'а. Більшість Лінаксів
користуються варіантом, відомим як sysvinit (написаний
написаний Міґелем ван Смуренбурґом139. Він базується на дизайні init 'а System
V. BSD версії Юніксів мають інший init . Основна
відмінність - в робочих рівнях. System V має робочі рівні, BSD
Юнікси - ні. Ця різниця - несуттєва, але ми будемо
розглядати тільки sysvinit .
Dmytro Kovalev
1999-06-10
|