Bagaimana Menggunakan Command Init di Linux

Init adalah ibu bapa semua proses. Peranan utama adalah untuk membuat proses dari skrip yang disimpan dalam fail / etc / inittab (lihat inittab (5)). Fail ini biasanya mempunyai entri yang menyebabkan init memancarkan getty s pada setiap baris yang pengguna boleh masuk. Ia juga mengawal proses autonomi yang diperlukan oleh mana-mana sistem tertentu.

Runlevels

Runlevel adalah konfigurasi perisian sistem yang membolehkan hanya satu kumpulan proses terpilih yang wujud. Proses yang dihasilkan oleh init untuk setiap runlevels ini ditakrifkan dalam fail / etc / inittab . Init boleh berada dalam salah satu lapan runlevels: 0-6 dan S atau s . Runlevel ditukar dengan mempunyai pengguna yang menjalankan telinit yang istimewa , yang menghantar isyarat yang sesuai kepada init , memberitahu yang runlevel untuk berubah.

Runlevels 0 , 1 , dan 6 adalah terpelihara. Runlevel 0 digunakan untuk menghentikan sistem, runlevel 6 digunakan untuk menyambung semula sistem, dan runlevel 1 digunakan untuk mendapatkan sistem ke dalam mod pengguna tunggal. Runlevel S tidak semestinya digunakan secara langsung, tetapi lebih banyak untuk skrip yang dilaksanakan ketika memasuki runlevel 1. Untuk maklumat lanjut mengenai ini, lihat manpages untuk shutdown (8) dan inittab (5).

Runlevels 7-9 juga sah, walaupun tidak didokumenkan. Ini kerana varian "tradisional" Unix tidak menggunakannya. Sekiranya anda ingin tahu, runlevels S dan s sebenarnya sama. Secara dalaman mereka adalah alias untuk runlevel yang sama.

Booting

Setelah init dipanggil sebagai langkah terakhir dari urutan boot kernel, ia mencari fail / etc / inittab untuk melihat apakah ada entri jenis initdefault (lihat inittab (5)). 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 membawa sistem kepada mod pengguna tunggal dan tidak memerlukan fail / etc / inittab . Dalam mod pengguna tunggal, shell root dibuka pada / dev / konsol .

Apabila memasuki mod pengguna tunggal, init membaca konsol ioctl (2) menyatakan dari /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 berbilang pengguna untuk kali pertama, init melakukan boot dan penyertaan bootwait untuk membolehkan sistem fail dipasang sebelum pengguna boleh log masuk. Kemudian semua entri yang sepadan dengan runlevel diproses.

Apabila memulakan proses baru, init mula memeriksa sama ada fail / etc / initscript ada. Sekiranya ia berlaku, ia menggunakan skrip ini untuk memulakan prosesnya.

Setiap kali anak tamat, init merekodkan fakta dan sebabnya ia mati di / var / run / utmp dan / var / log / wtmp , dengan syarat bahawa fail-fail ini wujud.

Menukar Runlevels

Selepas ia melahirkan semua proses yang ditentukan, init menunggu salah satu proses keturunannya untuk mati, isyarat kuasa, atau sehingga ditandakan dengan telinit untuk mengubah runlevel sistem. Apabila salah satu daripada tiga keadaan di atas 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 memberikan tindak balas serta-merta, arahan Q atau q telinit boleh membangkitkan 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, laksanakan entri powerokwait .

L (OW)

Kuasa yang gagal dan UPS mempunyai bateri yang rendah. Jalankan entri powerfailnow .

Jika / etc / powerstatus tidak wujud atau mengandungi apa-apa lagi maka huruf F , O atau L , init akan berkelakuan seolah-olah ia telah membaca huruf F.

Penggunaan SIGPWR dan / etc / powerstatus tidak digalakkan. Seseorang yang ingin berinteraksi dengan init harus menggunakan saluran kawalan / dev / initctl - lihat kod sumber pakej sysvinit untuk lebih banyak dokumentasi mengenai perkara ini.

Apabila init diminta untuk menukar runlevel, ia menghantar isyarat amaran SIGTERM kepada semua proses yang tidak ditentukan dalam runlevel baru. Ia kemudian menunggu 5 saat sebelum secara paksa menamatkan proses-proses ini melalui isyarat SIGKILL . Perhatikan bahawa init mengandaikan bahawa semua proses ini (dan keturunan mereka) kekal dalam kumpulan proses yang sama yang dibuat pada asalnya untuknya. Jika sebarang proses mengubah gabungan kumpulan prosesnya, ia tidak akan menerima isyarat ini. Proses sedemikian perlu ditamatkan secara berasingan.

Telinit

/ sbin / 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

memberitahu init untuk memproses hanya entri / etc / inittab yang mempunyai runlevel a , b atau c .

Q atau q

beritahu init untuk memeriksa semula / etc / inittab file.

S atau s

beritahu init untuk bertukar kepada mod pengguna tunggal.

U atau u

memberitahu init untuk melaksanakan semula dirinya (memelihara keadaan). Tiada pemeriksaan semula fail / etc / inittab yang berlaku. Tahap larian harus menjadi salah satu daripada Ss12345 , jika tidak permintaan akan diabaikan secara diam-diam.

Telinit juga boleh memberitahu init berapa lama ia perlu menunggu di antara proses penghantaran isyarat SIGTERM dan SIGKILL. Lalai adalah 5 saat, tetapi ini boleh ditukar dengan pilihan -t sec .

Telinit hanya boleh digunakan oleh pengguna dengan keistimewaan yang sesuai.

Pemeriksaan binari init jika init atau telinit dengan melihat id prosesnya ; id proses init sebenar sentiasa 1 . Daripada ini ia mengikuti bahawa bukannya memanggil telinit seseorang juga boleh menggunakan init sebagai gantinya sebagai pintasan.