Ubuntu non sta inviando SIGTERM all'arresto

18

Sto iniziando a sospettare che Ubuntu non stia dicendo alle applicazioni in esecuzione che sta chiudendo per consentire loro di uscire correttamente ma invece le costringe a uscire.

Se lascio chrome aperto quando si spegne, dice che non si è chiuso correttamente l'ultima volta quando lo riapro dopo l'avvio, LibreOffice non mi chiede se voglio salvare il mio documento e sto facendo un'applicazione che ha bisogno di Esegui un codice all'uscita ma non è autorizzato a farlo quando il computer viene spento.

Come ho capito, SIGTERM viene prima inviato a tutti i processi per consentire loro di uscire in modo pulito e se non escono SIGKILL viene inviato per costringerli a uscire. Sembra che Ubuntu non stia mandando SIGTERM o non dia tempo sufficiente alle applicazioni prima di inviare SIGKILL.

C'è un modo per sistemarlo?

Sto usando Ubuntu 16.04 ma il problema esisteva anche in 15.10. Non posso dire se era lì da quando ho iniziato ad usare Ubuntu quando 15.10 era la versione più recente.

Modifica: utilizzo Unity e spengo il mio computer premendo l'ingranaggio nell'angolo in alto a destra e selezionando lo spegnimento, anche se il problema è lo stesso se si esegue sudo halt nel terminale.

Modifica: osservo lo stesso comportamento quando si disconnette. La mia ipotesi è che il segnale dovrebbe essere inviato alla disconnessione e quindi il problema sorge allo spegnimento e alla disconnessione.

    
posta GKraft 13.06.2016 - 11:39

3 risposte

1

Sfortunatamente, non funziona in questo modo. Molti di quei programmi che hanno effettivamente un gestore di segnale, non bloccano il segnale per mostrare una finestra di conferma. La gestione del segnale è spesso minima o mancante.

Puoi facilmente provarlo senza doverlo chiudere. Invia SIGTERM alla tua esecuzione del processo di Firefox o LibreOffice:

$ pkill firefox

Normalmente, Firefox potrebbe chiederti se vuoi davvero chiuderlo. Inoltre, in genere richiede un po 'di tempo per chiudersi, soprattutto quando è in esecuzione da molto tempo e utilizza più di 1 GB di RAM - spesso il processo si interrompe dopo che l'ultima finestra è stata chiusa. Nulla di tutto ciò accade quando si invia SIGTERM, il processo è terminato immediatamente.

Tuttavia, alcuni ambienti desktop chiudono tutte le finestre aperte prima di spegnersi. A differenza di SIGTERM, chiudere una finestra a livello di programmazione è come fare clic sul pulsante X di quella finestra, o Alt + F4 . Questo è anche ciò che fa lo script nell'altra risposta: utilizza wmctrl per chiudere tutte le finestre aperte con garbo.

Quando una finestra è chiusa, il programma non ha fretta e può chiudere tutto all'interno di quella finestra, per esempio aprire le schede, e può anche mostrare una finestra di dialogo se c'è un lavoro non salvato. Una volta che tutte le finestre aperte di un'applicazione sono state chiuse, il processo di solito termina poco dopo.

Quindi dipende dal tuo ambiente desktop (supponendo che tu usi il tuo ambiente desktop per spegnere e non sudo poweroff ). Ad esempio, KDE dovrebbe aspettare che le finestre aperte vengano chiuse prima di spegnersi, mentre MATE no.

Bottom line: chiude tutte le finestre aperte manualmente prima di spegnersi. Oppure usa un ambiente desktop che aspetta che tutte le finestre siano chiuse.

    
risposta data c0xc 02.08.2016 - 14:04
0

Per quello che vale, qualche tempo fa, ho trovato questa procedura sul forum di Manjaro:

close_apps () {
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done

# Keep checking and waiting until all windows are closed
while [ "$WIN_IDs" != "" ]; do
        sleep 0.1;
        WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done

}

Puoi chiamarlo in uno script per chiudere tutte le app aperte prima dello spegnimento (o del riavvio).

L'unico problema è che è stato creato per Xfce, quindi ha bisogno di modifiche imposti da Unity DE. Un piccolo aiuto da qualcuno più esperto sarebbe venuto qui per aiutare a risolvere il problema dell'OP.

    
risposta data S.R. 28.06.2016 - 04:19
0

In realtà, una parte dello script che chiude tutte le finestre e non dipende da nessun particolare DE è disponibile su Ask. Le risposte 2 ° e 3 ° sono particolarmente utili. Con solo poche righe in più, e creando un launcher nel pannello o sul desktop, puoi ottenere il grazioso shutdown che funziona nel DE che stai utilizzando.

Come chiudere tutte le finestre aperte con garbo

    
risposta data S.R. 12.08.2016 - 20:07

Leggi altre domande sui tag