Pada sistem operasi mirip Unix, telinit dan init menyediakan inisialisasi kontrol proses. Mereka digunakan oleh sistem saat boot.
Halaman ini mencakup versi Linux dari telinit dan init.
Keterangan
init adalah induk dari semua proses. Peran utamanya adalah membuat proses dari skrip yang disimpan dalam file /etc/inittab. File ini biasanya memiliki entri yang menyebabkan init untuk bertelur gettys pada setiap baris yang dapat digunakan pengguna untuk masuk. Ini juga mengontrol proses otonom yang diperlukan oleh sistem tertentu.
Sintaksis
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t sec ] [ 0123456sSQqabcUu ]
Runlevel
Runlevel adalah konfigurasi perangkat lunak dari sistem yang memungkinkan hanya sekelompok proses yang dipilih. Proses yang dimunculkan oleh init untuk masing-masing runlevel ini didefinisikan dalam /etc/inittab mengajukan. init dapat berada di salah satu dari delapan runlevel: 0 melalui 6, dan S atau S. Runlevel diubah dengan menjalankan pengguna istimewa telinit, yang mengirimkan sinyal yang sesuai 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 pengguna tunggal. Runlevel S sebenarnya tidak dimaksudkan untuk digunakan secara langsung, tetapi lebih untuk skrip yang dieksekusi saat memasuki runlevel 1.
Runlevel 7 – 9 juga valid, meskipun tidak benar-benar didokumentasikan. Ini karena varian Unix “tradisional” tidak menggunakannya. Jika Anda penasaran, runlevel 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 jenis init default. Entri initdefault menentukan runlevel awal sistem. Jika tidak ada entri seperti itu (atau tidak ada /etc/inittab sama sekali), runlevel harus dimasukkan di konsol sistem.
Runlevel S atau S membawa sistem ke mode pengguna tunggal dan tidak memerlukan /etc/inittab mengajukan. Dalam mode pengguna tunggal, shell root dibuka pada /dev/konsol.
Saat memasuki mode pengguna tunggal, init menginisialisasi konsol sty pengaturan ke nilai yang waras. Mode “Clocal” diatur. Kecepatan perangkat keras dan jabat tangan tidak berubah.
Saat memasuki mode multi-pengguna untuk pertama kalinya, init melakukan sepatu bot dan tunggu sebentar entri untuk memungkinkan sistem file dipasang sebelum pengguna dapat masuk. Kemudian semua entri yang cocok dengan runlevel akan diproses.
Saat memulai proses baru, init pertama periksa apakah file /etc/initscript ada. Jika ya, ia menggunakan skrip ini untuk memulai proses.
Setiap kali seorang anak berhenti, init mencatat fakta dan alasan kematiannya di /var/run/utmp dan /var/log/wtmp, asalkan file-file ini ada.
Mengubah runlevel
Setelah itu telah melahirkan semua proses yang ditentukan, init menunggu salah satu proses turunannya mati, untuk sinyal “powerfail”, atau sampai ditandai oleh telinit untuk mengubah runlevel sistem. Ketika salah satu dari tiga kondisi di atas terjadi, ia memeriksa kembali: /etc/inittab mengajukan. Entri baru dapat ditambahkan ke file ini kapan saja. Namun, init masih menunggu salah satu dari tiga kondisi di atas terjadi. Untuk memberikan respons seketika, telinit Q (atau Q) perintah bisa bangun init untuk memeriksa kembali /etc/inittab file.
Jika init tidak dalam mode pengguna tunggal dan menerima sinyal powerfail (SIGPWR), ia membaca file /etc/status daya. Kemudian memulai perintah berdasarkan konten file ini:
- F (GAGAL) – Daya mati, UPS menyediakan daya. Jalankan entri powerwait dan powerfail.
- HAI (OK) – Daya dipulihkan, jalankan entri powerokwait.
- L (RENDAH) – Listrik mati dan UPS memiliki baterai lemah. Jalankan entri powerfailnow.
Jika /etc/status daya tidak ada atau mengandung hal lain selain huruf F, HAI atau L, init akan berperilaku seolah-olah telah membaca surat itu F.
penggunaan SIGPWR dan /etc/status daya putus asa. Seseorang yang ingin berinteraksi dengan init harus menggunakan /dev/initctl saluran kontrol. Informasi lebih lanjut tentang ini tersedia dengan melihat kode sumber dari sysvinit kemasan.
Kapan init diminta untuk mengubah runlevel, ia mengirimkan sinyal peringatan SIGTERM untuk semua proses yang tidak terdefinisi di runlevel baru. Kemudian menunggu 5 detik sebelum secara paksa menghentikan proses ini melalui SIGKILL sinyal. Perhatikan bahwa init mengasumsikan bahwa semua proses ini (dan turunannya) tetap berada dalam grup proses yang sama yang init diciptakan untuk mereka. Jika ada proses yang mengubah afiliasi grup prosesnya, proses tersebut tidak akan menerima sinyal ini. Proses tersebut perlu dihentikan secara terpisah.
Lingkungan
init menetapkan variabel lingkungan berikut untuk semua anaknya:
JALUR | /tempat sampah:/usr/bin:/sbin:/usr/sbin |
INIT_VERSION | Seperti namanya. Berguna untuk menentukan apakah skrip dijalankan langsung dari init. |
TINGKAT LANGKAH | Runlevel sistem saat ini. |
PREVLEVEL | Runlevel sebelumnya (terutama berguna setelah mengubah runlevel). |
MENGHIBUR | Konsol sistem. Ini benar-benar diwarisi dari kernel; namun jika tidak disetel, init menyetelnya ke /dev/konsol secara default. |
Telinit
/sbin/telinit terkait dengan /sbin/init. Dibutuhkan argumen dan sinyal satu karakter init untuk melakukan tindakan yang sesuai. Argumen berikut berfungsi sebagai arahan untuk telinit:
0, 1, 2, 3, 4, 5 atau 6 | Memberi tahu init untuk beralih ke level run yang ditentukan. |
A, B, C | Memberi tahu init untuk memproses hanya itu /etc/inittab entri file memiliki runlevel A, B atau C. |
Q atau Q | Memberi tahu init untuk memeriksa kembali /etc/inittab mengajukan. |
S atau S | Memberi tahu init untuk beralih ke mode pengguna tunggal. |
kamu atau kamu | Memberi tahu init untuk mengeksekusi kembali dirinya sendiri (melestarikan negara). Tidak ada pemeriksaan ulang /etc/inittab berkas terjadi. Tingkat lari harus menjadi salah satu dari S, S, 1, 2, 3, 4, atau 5, jika tidak, permintaan akan diabaikan secara diam-diam. |
telinit juga bisa memberitahu init berapa lama harus menunggu antara proses pengiriman SIGTERM dan SIGKILL sinyal. Standarnya adalah 5 detik, tetapi ini dapat diubah dengan -t detik pilihan.
telinit dapat dipanggil hanya oleh pengguna dengan hak istimewa yang sesuai.
NS init biner memeriksa apakah itu init atau telinit dengan melihat id prosesnya; yang asli initid prosesnya selalu 1. Dari sini dapat disimpulkan bahwa alih-alih menelepon telinit seseorang juga dapat menggunakan init sebaliknya sebagai jalan pintas.
Antarmuka
init mendengarkan di fifo in /dev (/dev/initctl) untuk pesan. Telinit menggunakan ini untuk berkomunikasi dengan init. Antarmuka tidak didokumentasikan dengan baik; untuk mempelajari lebih lanjut tentang antarmuka, pengguna harus melihat sumbernya sendiri.
Sinyal
init bereaksi terhadap beberapa sinyal, termasuk:
SIGHUP | Memiliki efek yang sama dengan telinit q. |
SIGUSR1 | Setelah menerima sinyal ini, init menutup dan membuka kembali fifo kontrolnya, /dev/initctl. Berguna untuk skrip boot saat /dev di-remount. |
TANDA | Biasanya kernel mengirimkan sinyal ini ke init ketika Ctrl-Alt-Del ditekan. Ini mengaktifkan ctrlaltdel tindakan. |
SIGWINCH | Kernel mengirimkan sinyal ini ketika KeyboardSinyal kunci dipukul. Ini mengaktifkan kbrequest tindakan. |
File
/etc/inittab
/etc/initscript
/dev/konsol
/var/run/utmp
/var/log/wtmp
/dev/initctl
Ini bootflag
Dimungkinkan untuk melewatkan beberapa flag ke init dari monitor boot (seperti LILO). init menerima bendera berikut:
-S, S, Lajang | Boot mode pengguna tunggal. Dalam mode ini /etc/inittab diperiksa dan skrip rc bootup biasanya dijalankan sebelum shell mode pengguna tunggal dimulai. |
1-5 | Runlevel untuk boot. |
-B, keadaan darurat | Boot langsung ke shell pengguna tunggal tanpa menjalankan skrip startup lainnya. |
-A, mobil | Boot loader LILO menambahkan kata “mobil” ke baris perintah jika kernel mem-boot dengan baris perintah default (tanpa campur tangan pengguna). Jika ini ditemukan, init menyetel “OTOBOOT“variabel lingkungan menjadi”Ya“. Perhatikan bahwa Anda tidak dapat menggunakan ini untuk tindakan keamanan apa pun; tentu saja pengguna dapat menentukan “mobil” atau -A pada baris perintah secara manual. |
-z xxx | Argumen untuk -z diabaikan. Anda dapat menggunakan ini untuk sedikit memperluas baris perintah, sehingga dibutuhkan lebih banyak ruang di tumpukan. init kemudian dapat memanipulasi baris perintah sehingga ps menunjukkan runlevel saat ini. |
telinit juga bisa memberitahu init berapa lama harus menunggu antara proses pengiriman SIGTERM dan SIGKILL sinyal. Standarnya adalah 5 detik, tetapi ini dapat diubah dengan -t detik pilihan.
telinit dapat dipanggil hanya oleh pengguna dengan hak istimewa yang sesuai.
NS init biner memeriksa apakah itu init atau telinit dengan melihat id prosesnya; id proses init yang sebenarnya selalu 1. Dari sini dapat disimpulkan bahwa alih-alih menelepon telinit seseorang juga dapat menggunakan init sebaliknya sebagai jalan pintas.
Perintah terkait
membunuh — Mengirim sinyal ke suatu proses, memengaruhi perilakunya atau mematikannya.
Gabung — Memulai sesi pada sistem.
melayani — Jalankan skrip init Sistem V.
NS — Penerjemah perintah shell Bourne.