Posso spegnere il sistema Ubuntu senza chiudere tutti i programmi in esecuzione. Penso che questo non dovrebbe accadere

  1. Quando spengo il sistema Ubuntu, non mi limita, ma mi permette di spegnere il mio sistema senza chiudere tutti i programmi.
  2. Perché non mi limita a chiudere tutti i programmi?

Ubuntu invierà il segnale SIGTERM per consentire alle applicazioni in esecuzione di terminare e chiudere con garbo i loro processi aperti. Solo se un’applicazione non ascolta SIGTERM potrebbe essere uccisa.

Nel caso in cui un’applicazione in esecuzione richieda l’interazione dell’utente (testare questo con un documento non salvato aperto da LibreOffice) l’arresto verrà interrotto fino all’interazione dell’utente.

Su un sistema multiutente, l’arresto avviato dall’utente viene interrotto fino a quando gli altri utenti hanno effettuato l’accesso. Abbiamo bisogno dei privilegi di root per poter eseguire lo shutdown. Quindi il segnale SIGTERM verrà inviato a tutte le applicazioni aperte in tutte le sessioni in esecuzione.

Se si suppone che dopo un timeout ( 90 s ) l’utente o le applicazioni non abbiano reagito al segnale SIGTERM, dovrebbe essere emesso SIGKILL che solo in questo caso dovrebbe portare alla perdita di dati non salvati. Il timeout KILL predefinito per SIGTERM emesso da upstart è molto più breve ( 5 s ).

I test sulla versione attuale hanno tuttavia dimostrato che possiamo sempre spegnerlo senza che venga richiesto di salvare il lavoro incompleto dell’altro altro utente registrato. Dato che questo può portare alla perdita di dati, considero questo un bug:

Secondo la mia esperienza con Ubuntu e altre distribuzioni Linux. Quando si spegne il computer, il kernel invia automaticamente una notifica di chiusura a tutti i programmi aperti. Quindi si spegne dopo aver ucciso tutti i processi, comprese le reti. Windows ha una funzionalità che funziona in modo leggermente diverso, se i processi aperti richiedono il salvataggio di un file, il processo di spegnimento viene sospeso per un po ‘di tempo fino a quando l’interazione dell’utente non viene osservata.

shutdown fa il suo lavoro segnalando il processo di init, chiedendogli di cambiare il runlevel. Runlevel 0 è usato per fermare il sistema.

Quindi, quando il livello di esecuzione cambia a 0 cioè init 0. init viene ucciso. In realtà init è il processo principale di tutti i processi in esecuzione nel sistema. se il processo genitore è morto, tutti i processi figli diventeranno zombi, cioè non sono processi reali e non considerevoli.

cioè tutti sono chiusi.

Leggi la sua Man-Page , tutto quello che devi fare è qualche ricerca sul processo di spegnimento.