Ho in qualche modo una vaga idea di come lo spazio utenti e init-system (sia esso classico init sysV / upstart / systemd) funzionino allo spegnimento del sistema. (Essenzialmente c'è una successione di ordini di "Stop!", "Per favore, fermati ora davvero", "Processo, devo ucciderti per fermarti" e aspettare ... le cose stanno succedendo).
Sono comunque ignaro di come funzioni l'arresto del sistema nel kernel (dove sicuramente ci sono anche molte cose da fare)?
Ho provato a consultare la documentazione del kernel https://www.kernel.org/doc/htmldocs/ e ho persino usato lo strumento di ricerca dell'amico della NSA per farmi capire come funziona.
Ho anche cercato su SE U + L e non ho trovato nulla (l'ho trascurato?)
Comunque la domanda, sebbene potenzialmente un po 'impegnativa, meriterebbe una risposta in questa rete di domande e risposte poiché presumo che più persone siano interessate a ottenere uno schizzo di ciò che accade nel kernel di Linux allo spegnimento.
Potenzialmente c'è anche una modifica per collegare ad alcune spiegazioni più dettagliate.
Una risposta potrebbe forse includere quali chiamate di sistema e quali segnali kernal sono utilizzati?
https://github.com/torvalds/linux/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/arch/x86/kernel/reboot.c sembra essere il file x86 utilizzato relativo al riavvio (già vicino allo spegnimento, eh?)
forse lo snippet trovato qui http://lxr.free-electrons.com/source/kernel/reboot.c#L176 può essere usato per dare una spiegazione
176 void kernel_power_off (void) 177 { 178 kernel_shutdown_prepare (SYSTEM_POWER_OFF); 179 if (pm_power_off_prepare) 180 pm_power_off_prepare (); 181 migrate_to_reboot_cpu (); 182 syscore_shutdown (); 183 pr_emerg ("Spegnimento \ n"); 184 kmsg_dump (KMSG_DUMP_POWEROFF); 185 machine_power_off (); 186} 187 EXPORT_SYMBOL_GPL (kernel_power_off);
shutdown(8)
cioè quella deprecata -n
che penso nella vecchia documentazione di Unix utilizzata per leggere " Spegnere il sistema noi stessi - l'unità principale è IN FUOCO! " In effetti un disordinato sistema kill-switch che lascerebbe / potrebbe lasciare frammenti sparsi sul pavimento (o almeno sui file system in uno stato corrotto) - si immagina che questo sarebbe usato per un sistema di tipo main frame in cui qualcuno ha appena preso la mano in una ventola di raffreddamento. 🕱