init süreci: tüm süreçlerin atası mı?


26

Her zaman init sürecinin tüm işlemlerin atası olduğunu öğrendim. İşlem 2 neden 0 PPID'sine sahip?

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]

Yanıtlar:


32

İ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 psbunları 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.modprobesysctl 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_patternvarsa tarafından belirtilen programı çağırır .


1
Yani inittüm "atası" olduğu user threadsise, [kthreadd ]her şeyden "ana" dır kernel threads, doğru? Teşekkürler!
Nan Xiao,

1
@ NanXiao Çoğunlukla, evet. Son paragrafımda belirttiğim gibi, kullanıcı işlemlerinin çekirdek tarafından başlatılması için başka yollar vardır, örneğin kernel.core_patternbir programın çekirdeklerini döküldüğü zaman listelenen program. Tipik bir sistemde onları göremezsiniz, çünkü bu işlemler işlerini hızlı bir şekilde yapar ve sonra çıkar.
Gilles 'SO- şeytan olmayı'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.