next up previous contents index
Дал╕: Настройка 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