init(8)

İSİM
init - süreç kontrol başlangıcı
telinit - çalışma seviyesini değiştirir

KULLANIM
/sbin/init    [ -a ] [ -s ] [ -b ] [ -z xxx] [ 0123456Ss ]
/sbin/telinit [ -t saniye ] [ 0123456sSQqabcUu ]

AÇIKLAMA
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.

ÇALIŞMA SEVİYELERİ
Ç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.

SİSTEM AÇILIŞI
Ç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).

ÇALIŞMA SEVİYELERİNİN DEĞİŞTİRİLMESİ
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:

F(AIL)
    Enerji KGK tarafından sağlanıyordur ve bir süre sonra enerji kesilecektir. powerwait ve powerfail girdileri çalıştırılır.

O(K)
    Enerji tekrar gelmiştir. powerokwait girdisi çalıştırılır.

L(OW)
    KGK'nın akülerindeki enerji azalmaktadır ve enerji kesilecektir. Powerfailnow girdisi çalıştırılır.

Ş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.

TELINIT
/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:

0,1,2,3,4,5 veya 6
    init'in, belirtilen çalışma seviyesine geçmesi istenir.

a,b veya c
    init'in, sadece a,b veya c çalışma seviyesi için verilmiş olan /etc/inittab dosyası girdilerini çalıştırması istenir.

Q veya q
    init'in, /etc/inittab dosyasını tekrar kontrol etmesi istenir.

S veya s
    init'in tek kullanıcılı kipe geçmesi istenir.

U veya u
    init'in, durumunu koruyarak, kendini tekrar başlatması istenir. /etc/inittab dosyası tekrar okunmaz. Çalışma seviyeleri Ss12345'den birisi olmalıdır. Aksi taktirde istek sessizce yok sayılır. Herhangi bir hata dönmez.

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.

ORTAM DEĞİŞKENLERİ
init, çalıştırdığı alt süreçler için aşağıdaki ortam değişkenlerini ayarlar:

PATH
    /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

INIT_VERSION
    init sürüm numarası. Bir betiğin doğrudan init tarafından çalıştırıp çalıştırmadığını anlamak açısından faydalıdır.

RUNLEVEL
    Geçerli sistem çalışma seviyesi.

PREVLEVEL
    Bir önceki sistem çalışma seviyesi. Çalışma seviyesinin değiştirilmesi durumunda, öncekini tespit etme açısından faydalıdır.

CONSOLE
    Sistem konsolu. Gerçekte çekirdekten miras alınır. Şayet bu seçenek ayarlanmaz ise, init tarafından öntanımlı olarak /dev/console kullanılır.

AÇILIŞ SEÇENEKLERİ
Açılış esnasında init'e seçenekler girilebilir (LILO içinden). init şu seçenekleri kabul eder:

-s, S, single
    Tek kullanıcı kipinde açılış. Bu kipte /etc/inittab dosyası incelenir ve açılış rc betikleri, tek kullanıcılı kip kabuğu başlatılmadan önce çalıştırılır.

1-5 Açılış sonrası girilecek çalışma seviyesini belirtir.

-b, emergency
    Herhangi bir açılış betiğini çalıştırmadan doğrudan tek kullanıcılı kip kabuğuna düşer.

-a, auto
    Çekirdek, kullanıcının müdahalesine gerek kalmadan öntanımlı komut satırı ile yüklenmişse, LILO önyükleyicisi komut satırına "auto" sözcüğünü ekler. Şayet bu bulunursa, init AUTOBOOT ortam değişkenine "yes" değerini atar. Bunu bir güvenlik ölçüsü olarak kullanamayacağınızı unutmayın, çünkü kullanıcı komut satırını kendi de tanımlayabilir.

-z xxx
    -z'ye verilen argüman yok sayılır. Bu seçeneği komut satırını biraz daha genişletmek için kullanabilirsiniz, böylece yığıt içinde daha fazla yer kaplaması sağlanmış olur. init komut satırını büyük bir ustalıkla yönetir, böylece ps(1) geçerli çalışma seviyesini gösterebilir.

ARAYÜZ
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.

SİNYALLER
init çeşitli sinyallere tepki verir:

SIGHUP
    init /etc/initrunlvl ve /var/log/initrunlvl dosyalarını arar. Şayet bu dosyalardan birisi var ise ve bir ASCII çalışma seviyesi içeriyorsa, init bu çalışma seviyesine geçer. Bu sadece geçmişe uyum için konulmuştur. Normal durumlarda (dosyanın olmadığı durumlarda) init, telinit'in -q seçeneği ile çalıştırıldığını kabul eder ve buna göre davranır.

SIGUSR1
    Bu sinyali alınca, init kendi denetim fifosu olan /dev/initctl'u kapatır ve tekrar açar. /dev dizinin tekrar bağlandığı zamanlarda, açılış betikleri için oldukça faydalıdır.

SIGINT
    CTRL-ALT-DEL üçlemesine basıldığı durumlarda, çekirdek init'e bu sinyali gönderir. O da ctrlaltdel eylemini etkinleştirir.

SIGWINCH
    KeyboardSignal tuşuna basıldığı durumlarda, çekirdek init'e bu sinyali gönderir. O da kbrequest eylemini etkinleştirir.

UYUM
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.

İLGİLİ DOSYALAR

/etc/inittab
/etc/initscript
/dev/console
/etc/ioctl.save
/var/run/utmp
/var/log/wtmp
/dev/initctl

UYARILAR
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.

TANI KOYMA
Ş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.

YAZAN
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.

İLGİLİ BELGELER
bash(1), getty(1), kill(1), login(1), initscript(5), inittab(5), utmp(5), runlevel(8), shutdown(8).

ÇEVİREN
Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Şubat 2004