init(8) | Linux Sistem Yöneticisinin Kılavuzu | init(8) |
init - süreç kontrol başlangıcı
telinit - çalışma seviyesini değiştirir
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx] [ 0123456Ss ] /sbin/telinit [ -t saniye ] [ 0123456sSQqabcUu ]
init, bütün süreçlerin atasıdır. init'in birincil görevi /etc/inittab içinde saklı betikten süreçler oluşturmaktır (ayrıntılar için inittab(5)'a bakınız). Bu dosyada, init'in çeşitli hatlar üzerinden kullanıcıların bağlanmasını sağlamak üzere getty(1) süreçleri oluşturmasını sağlayan girdiler vardır. Ayrıca belirli sistemler tarafından ihtiyaç duyulan özerk süreçleri de kontrol eder.
Çalışma seviyesi, sistemde varolan süreçlerden belirtilmiş olanların çalışmasını sağlayan yazılım yapılandırmasına verilen addır. Her bir çalışma seviyesi için, init tarafından başlatılan süreçler /etc/inittab dosyası içinde tanımlıdır. init sekiz değişik çalışma seviyesinden birinde olabilir: 0-6, S veya s. Çalışma seviyesi telinit kullanılarak yetkili bir kullanıcı tarafından, init'e uygun bir sinyal gönderilerek değiştirilir.
Çalışma seviyeleri 0, 1 ve 6 ayrılmış seviyelerdir. 0 sistemi durdurmak için, 6 tekrar başlatmak için ve 1 ise tek kullanıcılı kipe döndürmek için kullanılır. S seviyesi doğrudan kullanıcı ile alakalı değildir, daha çok çalışma seviyesi 1'e girerken çalıştırılan betikleri ifade eder. Bu konuda daha fazla bilgi için shutdown(8) ve inittab(5)'a bakınız.
7-9 arası çalışma seviyeleri de geçerlidir ama bu seviyeler hakkında belgelendirme yapılmamıştır. Çünkü "geleneksel" Unix türevleri bu seviyeleri kullanmazlar. Sırf merakınız gidermek için belirteyim ki S ve s aynıdır ve aynı çalışma seviyesini belirtirler.
Çekirdek açılış töreninin son halkası olarak init çalıştırıldığı zaman, içinde öntanımlı çalışma seviyesi girdisi olup olmadığını kontrol etmek için /etc/inittab dosyasına bakılır (bakınız inittab(5)). Bu öntanımlı çalışma seviyesi, sistem açılışı sonrası düşülecek çalışma seviyesini belirtir. Bu tür bir girdi yok ise veya /etc/inittab dosyası yok ise, konsoldan bir çalışma seviyesi girilmesi gerekir.
Çalışma seviyeleri S veya s, sistemi tek kullanıcı kipe sokar ve /etc/initab dosyasına ihtiyaç duymazlar. Tek kullanıcılı kipte, /dev/console üzerinde bir root kullanıcı kabuğu açılır.
Tek kullanıcılı kipine girilince, init konsolun ioctl(2) durumunu /etc/ioctl.save dosyasında okur. Şayet bu dosya yok ise, init hattı 9600 baud ve CLOCAL ile ilklendirir. init tek kullanıcılı kipi terk ederken konsolun ioctl ayarlarını bu dosyaya kaydeder. Böylece tekrar tek kullanıcılı kipe geçildiği zaman bu ayarları kullanabilir.
Çok kullanıcılı kipe ilk sefer girişte, kullanıcılar bağlanmadan önce dosya sisteminin bağlanmasını sağlayabilmek için boot ve bootwait girdileri init tarafından çalıştırılır. Daha sonra çalışma seviyesi ile eşleşen bütün girdiler çalıştırılır.
Yeni bir süreç başlatılırken, init ilk olarak /etc/initscript dosyasının var olup olmadığını kontrol eder. Şayet var ise, bu dosyada bulunan betikler süreci başlatmak için kullanılır.
Bir alt süreç her sonlandığında, bunun sebebi init tarafından /var/run/utmp ve /var/log/wtmp içine yazılır (bu dosyaların mevcut olup olmadığı önce kontrol edilir).
Belirtilen bütün süreçler çalıştırıldıktan sonra init; kendi oluşturduğu bir sürecin sonlandırılmasını, bir enerji kesme sinyalinin veya telinit tarafından gönderilen bir çalışma seviyesi değiştirme sinyalinin gelmesini bekler. Bu üç durumdan biri gerçekleşirse, /etc/inittab dosyasını tekrar kontrol eder. Bu dosyaya yeni girdiler eklenmiş olabilir. Bununla birlikte, init bunlardan birinin gerçekleşmesini bekler. Durumlara anında tepki verebilmek için, telinit'in Q veya q komutu ile init'in /etc/inittab dosyasını tekrar kontrol etmesi sağlanabilir. Şayet init tek kullanıcılı kipte değilse ve bir enerji kesme sinyali alırsa (SIGPWR), gidip /etc/powerstatus dosyasını okur. Daha sonra bu dosyanın içeriğine bağlı olarak şu komutlardan birini uygular:
Şayet /etc/powerstatus yok ise veya F, O veya L harflerinden farklı bir şey ihtiva ediyorsa, init, F harfini okuduğunu kabul eder ve ona göre davranır.
SIGPWR ve /etc/powerstatus kullanımı tavsiye edilmez. init ile etkileşimli kipe geçmek isteyen birisinin /dev/initctl'yi kullanması daha uygun olur. Bu konuda daha ayrıntılı bilgi için sysvinit paketinin kaynak kodundaki belgelere bakınız. Çalışma seviyesi değiştirme isteği init'e iletilince; init yeni seviyede tanımlanmamış olan bütün süreçlere SIGTERM sinyali gönderir. Daha sonra bu süreçleri sonlandırmadan önce 5 saniye bekler. 5 saniye sonra SIGKILL sinyali gönderir. NOT: init bütün süreçlerin ve onların alt süreçlerinin aynı süreç grubu içinde kaldığını varsayar. Şayet herhangi bir süreç, süreç grubunu üyeliğini değiştirmiş ise, o süreç bu sonlandırma sinyalini almaz. Bu tür süreçlerin ayrıca sonlandırılması gerekir.
/sbin/telinit, /sbin/init'e bir bağdır. Tek karakterlik argümanlar ve sinyalleri kabul eder. Aşağıdaki argümanlar telinit'e talimat olarak verilebilir:
Ayrıca telinit, init'e SIGTERM ve SIGKILL sinyalleri arasında ne kadar beklemesi gerektiğini de söyleyebilir. Öntanımlı değer 5 saniyedir fakat -t seçeneği kullanılarak bu değer değiştirilebilir. telinit, sadece uygun yetkiye sahip kullanıcılar tarafından kullanılabilir. init çalıştırılabiliri, kendinin init mi yoksa telinit mi olduğunu anlamak için süreç numarasını kontrol eder, gerçek init'in süreç numarası daima 1'dir. Buradan, telinit kullanmak yerine, init'in kısa yol olarak kullanılabileceği de ortaya çıkar.
init, çalıştırdığı alt süreçler için aşağıdaki ortam değişkenlerini ayarlar:
Açılış esnasında init'e seçenekler girilebilir (LILO içinden). init şu seçenekleri kabul eder:
init iletiler için; /dev içindeki /dev/initctl fifosunu dinler. Arayüz tam olarak bitmemiş ve belgeleme işlemleri de bitirilmemiştir. İlgilenenler /src dizinindeki init kaynak kodlarının tar arşivindeki initreq.h dosyasına bakabilirler.
init çeşitli sinyallere tepki verir:
init, System V init ile uyumludur. /etc/init.d ve /etc/rc{çalışmaseviyesi}.d dizinleri içindeki betikler ile birlikte uyum içinde çalışır. Eğer sisteminiz geleneksel yapıya uyuyorsa, /etc/init.d içinde bu betiklerin nasıl çalıştığını açıklayan bir README dosyası bulacaksınız.
/etc/inittab /etc/initscript /dev/console /etc/ioctl.save /var/run/utmp /var/log/wtmp /dev/initctl
init, süreçlerin ve bu süreçlerin soyundan gelen diğer süreçlerin orijinal süreç grupları içinde kaldıklarını varsayar. Şayet bir süreç, süreç grubunu değiştirirse, init bu süreci öldüremez ve aynı uçbirim hattında iki süreç ile karşılaşabilirsiniz.
Şayet bir girdi 2 dakika içinde 10 kereden fazla çoğaltılıyorsa, init, bu girdi satırında bir hata olduğunu düşünecek, sistem konsolundan bir hata iletisi verecek ve 5 dakika geçmeden veya bir sinyal almadan bu girdinin tekrar çoğalmasına izin vermeyecektir. Buradaki amaç, /etc/inittab içinde hatalı bir girdinin sistem kaynaklarını yok etmesini önlemektir.
Miquel van Smoorenburg <miquels (at) cistron.nl> tarafından yazılmıştır, ilk kılavuz sayfası Michael Haardt <u31b3hs (at) pool.informatik.rwthaachen.de> tarafından yazılmıştır.
bash(1), getty(1), kill(1), login(1), initscript(5), inittab(5), utmp(5), runlevel(8), shutdown(8).
Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Şubat 2004
23 Ağustos 2001 |