Cara Menggunakan Perintah Init di Linux

Init adalah induk dari semua proses. Peran utamanya adalah membuat proses dari skrip yang disimpan dalam file / etc / inittab (lihat inittab (5)). File ini biasanya memiliki entri yang menyebabkan init untuk menelurkan getty di setiap baris yang dapat digunakan oleh pengguna. Ini juga mengontrol proses otonom yang diperlukan oleh sistem tertentu.

Runlevels

Runlevel adalah konfigurasi perangkat lunak dari sistem yang memungkinkan hanya sekelompok proses yang dipilih untuk ada. 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-6 dan S atau s . Runlevel diubah dengan memiliki pengguna istimewa menjalankan telinit , yang mengirim sinyal yang tepat ke init , memberi tahu 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 menurunkan sistem ke mode single user. Runlevel S tidak benar-benar dimaksudkan untuk digunakan secara langsung, tetapi lebih untuk skrip yang dieksekusi ketika memasuki runlevel 1. Untuk informasi lebih lanjut tentang ini, lihat manpages for shutdown (8) dan inittab (5).

Runlevel 7-9 juga valid, meskipun tidak benar-benar didokumentasikan. Ini karena varian "tradisional" Unix tidak menggunakannya. Jika Anda penasaran, runlevels S dan s sebenarnya 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 tipe initdefault (lihat inittab (5)). 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 membawa sistem ke mode single user dan tidak memerlukan file / etc / inittab . Dalam mode pengguna tunggal, shell root dibuka di / dev / console .

Ketika memasuki mode single user, init membaca konsol ioctl (2) menyatakan dari /etc/ioctl.save . Jika file ini tidak ada, init inisialisasi baris pada 9600 baud dan dengan pengaturan CLOCAL . Ketika init meninggalkan mode pengguna tunggal, ia menyimpan pengaturan ioctl konsol dalam file ini sehingga dapat digunakan kembali untuk sesi pengguna tunggal berikutnya.

Saat memasukkan mode multi-pengguna untuk pertama kalinya, init melakukan boot dan entri boot menunggu untuk memungkinkan sistem file dipasang sebelum pengguna dapat masuk. Kemudian semua entri yang sesuai dengan runlevel diproses.

Ketika memulai proses baru, init terlebih dahulu memeriksa apakah file / etc / initscript ada. Jika ya, menggunakan skrip ini untuk memulai proses.

Setiap kali seorang anak berhenti, init merekam fakta dan alasannya meninggal di / var / run / utmp dan / var / log / wtmp , asalkan file-file ini ada.

Mengubah Runlevels

Setelah itu telah menelurkan 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 tiga kondisi di atas terjadi, itu 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 Q atau q telinit dapat membangunkan 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)

Kekuasaan gagal, UPS menyediakan daya. 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 hal lain maka huruf F , O atau L , init akan berperilaku seolah-olah telah membaca huruf F.

Penggunaan SIGPWR dan / etc / powerstatus tidak disarankan. Seseorang yang ingin berinteraksi dengan init harus menggunakan saluran kontrol / dev / initctl - lihat kode sumber paket sysvinit untuk dokumentasi lebih lanjut tentang ini.

Ketika init diminta untuk mengubah runlevel, ia mengirimkan sinyal peringatan SIGTERM ke semua proses yang tidak terdefinisi di runlevel baru. Kemudian menunggu 5 detik sebelum secara paksa mengakhiri proses ini melalui sinyal SIGKILL . Perhatikan bahwa init mengasumsikan bahwa semua proses ini (dan turunannya) tetap berada dalam kelompok proses yang sama yang awalnya dibuat untuk mereka. Jika ada proses yang mengubah afiliasi kelompok prosesnya, ia tidak akan menerima sinyal-sinyal ini. Proses semacam itu harus diakhiri secara terpisah.

Telinit

/ sbin / telinit terhubung ke / sbin / init . Diperlukan argumen satu karakter dan sinyal init untuk melakukan tindakan yang sesuai. Argumen berikut berfungsi sebagai arahan untuk telinit :

0 , 1 , 2 , 3 , 4 , 5 , atau 6

beri tahu init untuk beralih ke level run yang ditentukan.

a , b , c

beri tahu init untuk hanya memproses entri file / etc / inittab yang memiliki runlevel a , b atau c .

Q atau q

beri tahu init untuk memeriksa ulang file / etc / inittab .

S atau s

beri tahu init untuk beralih ke mode pengguna tunggal.

Kamu atau kamu

beri tahu init untuk mengeksekusi kembali dirinya (melestarikan negara). Tidak ada pemeriksaan ulang file / etc / inittab yang terjadi. Level run harus berupa salah satu dari Ss12345 , jika tidak permintaan akan diabaikan secara diam-diam.

telinit juga dapat memberitahu init berapa lama harus menunggu antara proses pengiriman sinyal SIGTERM dan SIGKILL. Standarnya adalah 5 detik, tetapi ini dapat diubah dengan opsi -t detik .

telinit dapat dipanggil hanya oleh pengguna dengan hak istimewa yang sesuai.

Biner init memeriksa apakah init atau telinit dengan melihat id prosesnya ; id proses init yang sebenarnya selalu 1 . Dari sini dapat disimpulkan bahwa alih-alih memanggil telinit seseorang juga dapat menggunakan init sebagai pintasan.