Di dalamnya adalah ibu bapa dari semua proses Linux. Ia adalah proses pertama untuk bermula apabila komputer dibasuh, dan ia berjalan sehingga sistem dimatikan. Ia adalah nenek moyang semua proses lain.
Peranan utamanya adalah untuk membuat proses dari skrip yang disimpan dalam fail / etc / inittab. Fail ini biasanya menyimpan entri yang menyebabkan Init memancarkan gettys pada setiap baris yang pengguna boleh log masuk. Ia juga mengawal proses autonomi yang diperlukan oleh mana-mana sistem tertentu.
Runlevels
A runlevel adalah konfigurasi perisian sistem yang hanya membenarkan kumpulan proses terpilih dijalankan. Proses yang dihasilkan oleh Init bagi setiap runlevels ini ditakrifkan dalam fail / etc / inittab. Init boleh di salah satu daripada lapan runlevels: 0 hingga 6 dan S atau s. Runlevel ditukar dengan mempunyai pengguna istimewa yang menjalankan Telinit, yang menghantar isyarat yang sesuai kepada Init, memberitahu yang runlevel itu berubah.
Runlevels 0, 1, dan 6 adalah terpelihara. Runlevel 0 digunakan untuk menghentikan sistem, runlevel 6 digunakan untuk menamatkan semula sistem, dan runlevel 1 digunakan untuk mendapatkan sistem ke dalam mod tunggal pengguna. Runlevel S tidak dimaksudkan untuk digunakan secara langsung tetapi oleh skrip yang dilaksanakan ketika memasuki runlevel 1.
Runlevels 7 hingga 9 juga sah, walaupun tidak didokumenkan dengan baik kerana varian "tradisional" Unix tidak menggunakannya. Runlevels S dan s adalah sama. Secara dalaman, mereka adalah alias untuk runlevel yang sama.
Booting
Selepas Init dipanggil sebagai langkah terakhir dari urutan boot kernel, ia mencari fail / etc / inittab untuk melihat apakah terdapat kemasukan jenis initdefault . Kemasukan initdefault menentukan runlevel awal sistem. Sekiranya tiada entri tersebut (atau tidak / etc / inittab sama sekali), runlevel mesti dimasukkan pada konsol sistem.
Runlevel S atau s mengambil sistem ke mod satu pengguna dan tidak memerlukan fail / etc / inittab. Dalam mod pengguna tunggal, shell root dibuka pada / dev / konsol.
Apabila memasuki mod pengguna tunggal, init membaca keadaan ioctl konsol daripada /etc/ioctl.save. Jika fail ini tidak wujud, init memulakan baris pada 9600 baud dan dengan tetapan CLOCAL. Apabila init meninggalkan mod pengguna tunggal, ia menyimpan tetapan ioctl konsol dalam fail ini supaya ia boleh digunakan semula untuk sesi pengguna tunggal seterusnya.
Apabila memasuki mod multiuser untuk kali pertama, Init melakukan boot dan entri bootwait untuk membolehkan sistem fail dipasang sebelum pengguna boleh masuk. Kemudian, semua entri yang sepadan dengan runlevel diproses.
Apabila memulakan proses baru, Init akan mula memeriksa sama ada fail / etc / initscript ada. Sekiranya ia berlaku, ia menggunakan skrip ini untuk memulakan prosesnya.
Setiap kali seorang kanak-kanak tamat, Init mencatatkan fakta dan sebabnya ia mati di / var / run / utmp dan / var / log / wtmp, dengan syarat fail-fail ini wujud.
Menukar Runlevels
Selepas ia mengeluarkan semua proses yang ditentukan, Init menunggu salah satu daripada proses keturunannya untuk mati, isyarat powerfail, atau sehingga ditandakan oleh Telinit untuk mengubah runlevel sistem. Apabila salah satu daripada tiga keadaan berlaku, ia menyemak semula fail / etc / inittab. Kemasukan baru boleh ditambah ke fail ini pada bila-bila masa. Walau bagaimanapun, init masih menunggu satu daripada tiga keadaan di atas berlaku. Untuk memberi respons segera, arahan Telinit Q atau q boleh bangun Init untuk memeriksa semula fail / etc / inittab.
Jika Init tidak berada dalam mod pengguna tunggal dan menerima isyarat powerfail (SIGPWR), ia membaca fail / etc / powerstatus. Ia kemudiannya memulakan arahan berdasarkan kandungan fail ini:
- F (AIL): Kuasa gagal, UPS menyediakan kuasa. Jalankan entri powerwait dan powerfail.
- OKEY): Kuasa telah dipulihkan, melaksanakan entri powerokwait.
- L (OW): Kuasa gagal, dan UPS mempunyai bateri yang rendah. Jalankan entri powerfailnow.
Jika / etc / powerstatus tidak wujud atau mengandungi apa-apa selain huruf F, O, atau L, Init bertindak seolah-olah ia membaca huruf F.
Penggunaan SIGPWR dan / etc / powerstatus tidak digalakkan. Sesiapa yang ingin berinteraksi dengan Init harus menggunakan saluran kawalan / dev / initctl.
Apabila Init diminta untuk menukar runlevel, ia menghantar isyarat amaran SIGTERM kepada semua proses yang tidak ditentukan dalam runlevel baru. Ia kemudian menunggu lima saat sebelum secara paksa menamatkan proses ini dengan menggunakan isyarat SIGKILL. Perhatikan bahawa Init mengandaikan bahawa semua proses dan keturunan mereka kekal dalam kumpulan proses yang sama yang dibuat oleh Init pada asalnya. Jika mana-mana proses mengubah gabungan kumpulan prosesnya, ia tidak menerima isyarat ini. Proses sedemikian perlu ditamatkan secara berasingan.
Telinit
Telinit dikaitkan dengan / sbin / init. Ia mengambil hujah satu aksara dan isyarat Init untuk melaksanakan tindakan yang sesuai. Hujah-hujah berikut berfungsi sebagai arahan kepada Telinit:
- 0, 1, 2, 3, 4, 5, atau 6: Beritahu Init untuk beralih ke tahap larian yang dinyatakan.
- a, b, c: Beritahu Init untuk memproses hanya penyertaan fail / etc / inittab yang mempunyai runlevel a, b, atau c.
- Q atau q: Beritahu Init untuk memeriksa semula fail / etc / inittab.
- S atau s: Beritahu Init untuk bertukar kepada mod pengguna tunggal.
- U atau u: Beritahu init untuk melaksanakan semula dirinya (memelihara keadaan). Tiada pemeriksaan semula fail / etc / inittab yang berlaku. Runlevel harus S, s, 1, 2, 3, 4, atau 5; sebaliknya, permintaan itu diabaikan secara senyap-senyap.
Telinit juga boleh memberitahu Init berapa lama ia perlu menunggu di antara proses penghantaran isyarat SIGTERM dan SIGKILL. Lalai adalah lima saat, tetapi nilai ini boleh ditukar dengan -t sec pilihan.
Telinit hanya boleh digunakan oleh pengguna dengan keistimewaan yang sesuai.
Pemeriksaan binari Init jika Init atau Telinit dengan melihat ID prosesnya. ID proses sebenar Init adalah sentiasa 1. Dari ini, ia mengikuti bahawa bukannya memanggil Telinit, seseorang boleh menggunakan Init sebagai pintasan.