GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Init Process:antenato di tutti i processi?

Ho sempre imparato che il processo init è l'antenato di tutti i processi. Perché il processo 2 ha un PPID pari a 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]

Risposta accettata:

Innanzitutto, "antenato" non è la stessa cosa di "genitore". L'antenato può essere il genitore del genitore … il genitore del genitore e il kernel tiene traccia di un solo livello.
Tuttavia, quando un processo muore, i suoi figli vengono adottati da init, quindi vedrai molti processi il cui genitore è 1 su un sistema tipico.

I moderni sistemi Linux hanno inoltre alcuni processi che eseguono il codice del kernel, ma sono gestiti come processi utente, per quanto riguarda la pianificazione. (Non obbediscono alle normali regole di gestione della memoria poiché eseguono il codice del kernel.) Questi processi sono tutti generati da kthreadd (è l'inizializzazione dei thread del kernel). Puoi riconoscerli dal loro ID processo padre (2) o, di solito, dal fatto che ps li elenca con un nome tra parentesi quadre o dal fatto che /proc/2/exe (normalmente un collegamento simbolico all'eseguibile del processo) non può essere letto.

Processi 1 (init ) e 2 (kthreadd ) vengono creati direttamente dal kernel al momento dell'avvio, quindi non hanno un genitore. Il valore 0 viene utilizzato nel loro campo ppid per indicarlo. Pensa a 0 come a "il kernel stesso" qui.

Linux ha anche alcune funzionalità per il kernel per avviare processi utente la cui posizione è indicata tramite un parametro sysctl in determinate circostanze. Ad esempio, il kernel può attivare eventi di caricamento dei moduli (ad esempio quando viene scoperto nuovo hardware o quando vengono utilizzati per la prima volta alcuni protocolli di rete) chiamando il programma in kernel.modprobe valore sysctl. Quando un programma esegue il dump del core, il kernel chiama il programma indicato da kernel.core_pattern se presente.


Linux
  1. 30 Esercizi sui processi Linux per amministratori di sistema

  2. UNIX / Linux:3 modi per inviare segnali ai processi

  3. Processi UNIX / Linux:funzione C fork()

  4. Come calcolare l'utilizzo della CPU di un processo e tutti i suoi processi figlio in Linux?

  5. I thread del kernel di Linux sono davvero processi del kernel?

Come elencare i processi in esecuzione in Linux

Comando Ps in Linux (Elenca processi)

Come uccidere i processi Zombie in Linux

Monitoraggio dei processi su Linux

Comandi per la gestione dei processi in Linux

Come inviare processi in background su Linux