Init adalah induk dari semua proses Linux. Ini adalah proses pertama untuk memulai ketika komputer boot, dan itu berjalan sampai sistem mati. Ini adalah leluhur dari semua proses lainnya.
Peran utamanya adalah membuat proses dari skrip yang disimpan dalam file / etc / inittab. File ini biasanya menyimpan entri yang menyebabkan Init untuk menelurkan gettys pada setiap baris yang dapat digunakan oleh pengguna. Ini juga mengontrol proses otonom yang diperlukan oleh sistem tertentu.
Runlevels
SEBUAH runlevel adalah konfigurasi perangkat lunak dari sistem yang memungkinkan hanya sekelompok proses yang dipilih untuk dieksekusi. Proses yang dihasilkan oleh Init untuk masing-masing runlevel ini didefinisikan dalam file / etc / inittab. Init dapat berada di salah satu dari delapan runlevel: 0 hingga 6 dan S atau s. Runlevel diubah dengan memiliki pengguna istimewa yang menjalankan Telinit, yang mengirim sinyal yang tepat ke Init, memberitahukannya runlevel mana yang akan diubah.
Runlevel 0, 1, dan 6 dicadangkan. Runlevel 0 digunakan untuk menghentikan sistem, runlevel 6 digunakan untuk me-reboot sistem, dan runlevel 1 digunakan untuk membuat sistem menjadi mode single-user. Runlevel S tidak dimaksudkan untuk digunakan secara langsung melainkan oleh skrip yang dieksekusi ketika memasuki runlevel 1.
Runlevel 7 hingga 9 juga valid, meskipun tidak terdokumentasi dengan baik karena varian "tradisional" Unix tidak menggunakannya. Runlevels S dan s adalah sama. Secara internal, mereka adalah alias untuk runlevel yang sama.
Booting
Setelah Init dipanggil sebagai langkah terakhir dari urutan boot kernel, ia mencari file / etc / inittab untuk melihat apakah ada entri dari jenis initdefault . Entri initdefault menentukan runlevel awal sistem. Jika tidak ada entri semacam itu (atau tidak ada / etc / inittab sama sekali), runlevel harus dimasukkan pada konsol sistem.
Runlevel S atau s mengambil sistem ke mode single-user dan tidak memerlukan file / etc / inittab. Dalam mode single-user, shell root dibuka di / dev / console.
Saat memasuki mode single-user, init membaca status ioctl konsol dari /etc/ioctl.save. Jika file ini tidak ada, init inisialisasi baris pada 9600 baud dan dengan pengaturan CLOCAL. Ketika init meninggalkan mode single-user, ia menyimpan pengaturan ioctl konsol dalam file ini sehingga ia dapat menggunakannya kembali untuk sesi pengguna tunggal berikutnya.
Ketika memasuki mode multiuser untuk pertama kalinya, Init melakukan boot dan entri menunggu boot untuk memungkinkan sistem file untuk me-mount sebelum pengguna dapat masuk. Kemudian, semua entri yang sesuai dengan runlevel diproses.
Ketika memulai proses baru, Init pertama memeriksa apakah file / etc / initscript ada. Jika ya, menggunakan skrip ini untuk memulai proses.
Setiap kali seorang anak berhenti, Init mencatat fakta dan alasannya meninggal di / var / run / utmp dan / var / log / wtmp, asalkan file-file ini ada.
Mengubah Runlevels
Setelah itu memunculkan semua proses yang ditentukan, Init menunggu salah satu proses keturunannya mati, sinyal powerfail, atau sampai sinyal oleh Telinit untuk mengubah runlevel sistem. Ketika salah satu dari ketiga kondisi ini terjadi, ia memeriksa ulang file / etc / inittab. Entri baru dapat ditambahkan ke file ini kapan saja. Namun, init masih menunggu salah satu dari tiga kondisi di atas terjadi. Untuk memberikan tanggapan seketika, perintah Telinit Q atau q dapat membangunkan Init untuk memeriksa ulang file / etc / inittab.
Jika Init tidak dalam mode single-user dan menerima sinyal powerfail (SIGPWR), ia membaca file / etc / powerstatus. Kemudian memulai perintah berdasarkan isi file ini:
- GAGAL): Listrik mati, UPS menyediakan listrik. Jalankan entri powerwait dan entri powerfail.
- BAIK): Kekuatan telah dipulihkan, jalankan entri powerokwait.
- RENDAH): Listrik mati, dan UPS memiliki baterai yang rendah. Jalankan entri powerfailnow.
Jika / etc / powerstatus tidak ada atau mengandung apa pun selain huruf F, O, atau L, Init berperilaku seolah-olah membaca huruf F.
Penggunaan SIGPWR dan / etc / powerstatus tidak disarankan. Siapa pun yang ingin berinteraksi dengan Init harus menggunakan saluran kontrol / dev / initctl.
Ketika Init diminta untuk mengubah runlevel, Init mengirimkan sinyal peringatan SIGTERM ke semua proses yang tidak terdefinisi di runlevel baru. Kemudian menunggu lima detik sebelum secara paksa mengakhiri proses-proses ini menggunakan sinyal SIGKILL. Perhatikan bahwa Init mengasumsikan bahwa semua proses dan keturunan mereka tetap dalam kelompok proses yang sama yang awalnya diciptakan Init untuk mereka. Jika ada proses yang mengubah afiliasi kelompok prosesnya, ia tidak menerima sinyal-sinyal ini. Proses semacam itu harus diakhiri secara terpisah.
Telinit
Telinit terhubung ke / sbin / init. Diperlukan argumen satu karakter dan memberi isyarat Init untuk melakukan tindakan yang sesuai. Argumen berikut berfungsi sebagai arahan ke Telinit:
- 0, 1, 2, 3, 4, 5, atau 6: Beritahu Init untuk beralih ke level run yang ditentukan.
- a, b, cBeritahu Init untuk hanya memproses entri file / etc / inittab yang memiliki runlevel a, b, atau c.
- Q atau q: Beritahu Init untuk memeriksa ulang file / etc / inittab.
- S atau s: Beritahu Init untuk beralih ke mode single-user.
- Kamu atau kamu: Katakan pada init untuk mengeksekusi kembali dirinya (melestarikan negara). Tidak ada pemeriksaan ulang file / etc / inittab yang terjadi. Runlevel harus S, s, 1, 2, 3, 4, atau 5; jika tidak, permintaan itu diam-diam diabaikan.
Telinit juga dapat memberi tahu Init berapa lama harus menunggu antara proses pengiriman sinyal SIGTERM dan SIGKILL. Standarnya adalah lima detik, tetapi nilai ini dapat diubah dengan -t detik pilihan.
Telinit dapat dipanggil hanya oleh pengguna dengan hak istimewa yang sesuai.
Biner Init memeriksa apakah itu Init atau Telinit dengan melihat ID prosesnya. ID proses Init yang sebenarnya selalu 1. Dari ini, berarti bahwa alih-alih memanggil Telinit, seseorang dapat menggunakan Init sebagai cara pintas.




