Linux'ta Init Komutu Nasıl Kullanılır

Init , tüm süreçlerin ebeveyni. Birincil rolü, / etc / inittab dosyasında saklanan bir komut dosyasından süreçler oluşturmaktır (bkz. Inittab (5)). Bu dosya genellikle, kullanıcıların giriş yapabildikleri her satırda getty s ürettikleri initlere neden olan girişlere sahiptir. Ayrıca herhangi bir sistemin gerektirdiği otonom süreçleri de denetler.

çalışma_seviyeleri

Bir çalışma seviyesi , sadece seçilmiş bir süreç grubunun varlığına izin veren, sistemin bir yazılım yapılandırmasıdır. Bu çalışma seviyelerinin her biri için init tarafından oluşturulan süreçler / etc / inittab dosyasında tanımlanmıştır. Init , sekiz çalışma seviyesinden birinde olabilir: 0-6 ve S veya s . Çalışma seviyesi, uygun sinyalleri init'e göndererek, hangi çalışma seviyesinin değişeceğini söyleyen ayrıcalıklı bir kullanıcı telinitine sahip olarak değiştirilir.

Çalışma seviyeleri 0 , 1 ve 6 ayrılmıştır. Runlevel 0 sistemi durdurmak için kullanılır, sistemi yeniden başlatmak için runlevel 6 kullanılır ve sistemi tek kullanıcı moduna getirmek için runlevel 1 kullanılır. Runlevel S gerçekte doğrudan kullanılmaz, ancak runlevel 1'e girerken çalıştırılan betikler için daha fazlasıdır. Bununla ilgili daha fazla bilgi için, kapatma (8) ve inittab (5) için man sayfalarına bakın.

Gerçekten de belgelenmemiş olsa da, 7-9 arası çalışma seviyeleri de geçerlidir. Bunun nedeni, "geleneksel" Unix türevlerinin bunları kullanmamasıdır. Merak ediyorsan, S ve s'ler de gerçekte aynı. Dahili olarak aynı çalışma seviyesi için takma adlardır.

Booting

Init , çekirdek önyükleme dizisinin son adımı olarak çalıştırıldıktan sonra, initdefault türünde bir giriş olup olmadığını görmek için / etc / inittab dosyasını arar ( inittab (5) 'e bakın). Initdefault girişi sistemin ilk çalışma seviyesini belirler. Eğer böyle bir giriş yoksa (veya / etc / inittab hiç), sistem konsolunda bir çalışma seviyesi girilmelidir.

Runlevel S veya s sistemi tek kullanıcı moduna getirir ve / etc / inittab dosyası gerektirmez. Tek kullanıcı modunda, / dev / console'da bir kök kabuk açılır.

Tek kullanıcı moduna girerken, init konsolun ioctl (2) durumlarını /etc/ioctl.save dosyasından okur . Bu dosya mevcut değilse, init , satırı 9600 baud ve CLOCAL ayarları ile başlatır . Init tek kullanıcı modundan ayrıldığında, konsolun ioctl ayarlarını bu dosyada saklar, böylece bir sonraki tek kullanıcı oturumu için yeniden kullanabilir.

Çok kullanıcılı bir modu ilk kez girerken, init , kullanıcıların oturum açabilmesi için dosya sistemlerinin monte edilmesine izin vermek için önyükleme ve önyükleme girişlerini gerçekleştirir. Ardından, çalışma seviyesine uyan tüm girişler işlenir.

Yeni bir işlem başlatırken, init öncelikle / etc / initscript dosyasının bulunup bulunmadığını kontrol eder. Eğer varsa, işlemi başlatmak için bu betiği kullanır.

Bir çocuk her sona erdiğinde, init , bu dosyaların mevcut olması koşuluyla / var / run / utmp ve / var / log / wtmp dosyasında öldüğü nedenini ve nedenini kaydeder.

Değişen Runleveller

Belirtilen tüm süreçler ortaya çıktıktan sonra, init kendi alt süreçlerinden birinin ölmesini, bir powerfail sinyalinin veya telinit tarafından sistemin çalışma seviyesini değiştirmek için işaret edilene kadar bekler. Yukarıdaki üç koşuldan biri oluştuğunda, / etc / inittab dosyasını yeniden inceler. Bu dosyaya herhangi bir zamanda yeni girişler eklenebilir. Ancak, init hala yukarıdaki üç koşuldan birinin gerçekleşmesini beklemektedir. Anlık bir yanıt sağlamak için, telinit Q veya q komutu / etc / inittab dosyasını yeniden incelemek için init uyandırabilir.

Eğer init tek kullanıcı modunda değilse ve bir powerfail sinyali (SIGPWR) alırsa, / etc / powerstatus dosyasını okur. Daha sonra bu dosyanın içeriğine göre bir komut başlatır:

BAŞARISIZ)

Güç kesiliyor, UPS gücü veriyor. Powerwait ve powerfail girişlerini yürütün.

TAMAM)

Güç geri yüklendi, powerokwait girişlerini yürütün.

DÜŞÜK)

Güç kesiliyor ve KGK düşük bir aküye sahip. Powerfailnow girişlerini yürütün.

/ Etc / powerstatus yoksa veya başka bir şey içeriyorsa, F , O veya L harfleri init, F harfini okuyormuş gibi davranır.

SIGPWR ve / etc / powerstatus kullanımı önerilmez. Init ile etkileşim kurmak isteyen biri / dev / initctl denetim kanalını kullanmalıdır - bunun hakkında daha fazla bilgi için sysvinit paketinin kaynak koduna bakın.

Init'in çalışma seviyesini değiştirmesi istendiğinde, SIGTERM uyarı sinyalini yeni çalışma seviyesinde tanımlanmamış tüm işlemlere gönderir. Daha sonra bu işlemleri SIGKILL sinyali ile zorla sonlandırmadan önce 5 saniye bekler. Init , tüm bu işlemlerin (ve onların soyundan gelenlerin) başlangıçta kendileri için yaratılan aynı işlem grubunda olduğunu varsayar. Herhangi bir süreç kendi süreç grubu bağlantısını değiştirirse, bu sinyalleri almayacaktır. Bu süreçlerin ayrı olarak sonlandırılması gerekir.

telinit

/ sbin / telinit / sbin / init ile bağlantılıdır . Tek karakterli bir argüman alır ve uygun eylemi gerçekleştirmek için init sinyalleri verir. Aşağıdaki argümanlar teleitlere direktif olarak hizmet eder:

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

Belirtilen çalışma seviyesine geçmek için init söyle.

a , b , c

sadece a , b veya c runlevel / etc / inittab dosya girişlerini işlemek için init söyleyin.

Q veya q

/ etc / inittab dosyasını yeniden incelemek için init söyleyin.

S veya s

Tek kullanıcı moduna geçmek için init söyle.

Ya da sen

Kendisini yeniden yürütmek için söyleyin (durumu koruyarak). / Etc / inittab dosyasının yeniden incelemesi yapılmaz. Çalışma seviyesi Ss12345'ten biri olmalı , aksi takdirde istek sessizce göz ardı edilecektir.

Telinit ayrıca, SIGTERM ve SIGKILL sinyallerini gönderme süreçleri arasında ne kadar beklenmesi gerektiğini de söyleyebilir. Varsayılan 5 saniyedir, ancak bu -t sec seçeneği ile değiştirilebilir.

telinit sadece uygun ayrıcalıklara sahip kullanıcılar tarafından çalıştırılabilir.

Init ikili, işlem kimliğine bakarak init veya telinit olup olmadığını kontrol eder; Gerçek init işlem kimliği her zaman 1'dir . Bundan, telinit çağırmak yerine init'i bir kısayol olarak da kullanabilir.