İlk olarak, “ata”, “ebeveyn” ile aynı şey değildir. Ata ebeveynin ebeveyni olabilir… ebeveyn ebeveyni ve çekirdek sadece bir seviye izler. Bununla birlikte, bir süreç öldüğünde, çocukları init tarafından benimsenir, dolayısıyla ebeveynleri tipik bir sistemde 1 olan birçok işlem görürsünüz.
Modern Linux sistemlerinde ayrıca çekirdek kodunu uygulayan, ancak zamanlama söz konusu olduğunda kullanıcı işlemleri olarak yönetilen birkaç işlem vardır. (Çekirdek kodunu çalıştırdıkları için normal bellek yönetimi kurallarına uymazlar.) Bu işlemlerin tümü tarafından kthreadd
üretilir (çekirdek dişlerinin başlangıcıdır). Bunları üst işlem kimlikleriyle (2) veya genellikle ps
bunları köşeli parantezler arasında bir adla listeleyerek veya /proc/2/exe
(normalde işlemin çalıştırılabilirine sembolik bir bağın okunamaması) gerçeğiyle tanıyabilirsiniz .
İşlemler 1 ( init
) ve 2 ( kthreadd
), önyükleme sırasında doğrudan çekirdek tarafından oluşturulur, böylece üstleri olmaz. 0 değeri, ppid alanında bunu belirtmek için kullanılır. 0 değerini burada “çekirdeğin kendisi” olarak düşünün.
Linux ayrıca, çekirdeğin, konumu belirli durumlarda bir sysctl parametresiyle belirtilen kullanıcı işlemlerini başlatması için bazı olanaklara sahiptir . Örneğin, çekirdek, programı kernel.modprobe
sysctl değerinde çağırarak modül yükleme olaylarını (örneğin, yeni bir donanım bulunduğunda veya bazı ağ protokolleri ilk kez kullanıldığında) tetikleyebilir . Bir program çekirdek döküldüğünde, çekirdek kernel.core_pattern
varsa tarafından belirtilen programı çağırır .
init
tüm "atası" olduğuuser threads
ise,[kthreadd ]
her şeyden "ana" dırkernel threads
, doğru? Teşekkürler!