GNU/Linux >> Znalost Linux >  >> Linux

Linux – Init Process:Předchůdce všech procesů?

Vždy jsem se učil, že proces init je předkem všech procesů. Proč má proces 2 PPID 0?

$ 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]

Přijatá odpověď:

Za prvé, „předek“ není totéž jako „rodič“. Předkem může být rodič rodiče … rodič rodiče a jádro sleduje pouze jednu úroveň.
Když však proces zemře, jeho potomci jsou adoptováni init, takže uvidíte spoustu procesů, jejichž rodič je 1 na typickém systému.

Moderní linuxové systémy mají navíc několik procesů, které provádějí kód jádra, ale jsou spravovány jako uživatelské procesy, pokud jde o plánování. (Neposlouchají obvyklá pravidla správy paměti, protože používají kód jádra.) Všechny tyto procesy vytváří kthreadd (je to init jaderných vláken). Poznáte je podle ID jejich nadřazeného procesu (2) nebo obvykle podle toho, že ps uvádí je se jménem v hranatých závorkách nebo podle skutečnosti, že /proc/2/exe (obvykle symbolický odkaz na spustitelný soubor procesu) nelze přečíst.

Procesy 1 (init ) a 2 (kthreadd ) jsou vytvářeny přímo jádrem při spouštění, takže nemají rodiče. Hodnota 0 se používá v jejich poli ppid k označení toho. Myslete na to, že 0 zde znamená „samotné jádro“.

Linux má také určitá zařízení pro jádro ke spouštění uživatelských procesů, jejichž umístění je za určitých okolností indikováno parametrem sysctl. Například jádro může spouštět události načítání modulu (např. když je objeven nový hardware nebo když jsou poprvé použity některé síťové protokoly) voláním programu v kernel.modprobe hodnota sysctl. Když program vypíše jádro, jádro zavolá program označený kernel.core_pattern pokud existuje.


Linux
  1. 30 Cvičení procesů Linuxu pro systémové správce

  2. Linux – Proč nemůže jádro spustit inicializaci?

  3. UNIX / Linux:3 způsoby odesílání signálu do procesů

  1. UNIX / Linux Procesy:C fork() Funkce

  2. Správa procesů v Ubuntu Linux

  3. Jak najít všechny podřízené procesy?

  1. Jak vypočítat využití CPU procesu a všech jeho podřízených procesů v Linuxu?

  2. Linux sledovat všechny soubory, ke kterým má proces přístup?

  3. Jsou vlákna jádra Linuxu skutečně procesy jádra?