Próbuję uzyskać płynne zamknięcie / ponowne uruchomienie w ArchLinux z GNOME Shell. Teraz, gdy proszę o zamknięcie, natychmiast się wyłącza, nie dając programom czasu na pełne wdzięczne zamykanie / zapisywanie otwartych plików. W rezultacie za każdym razem, gdy ponownie uruchamiam Chrome (na przykład), mówi mi, że sesja nie została poprawnie zamknięta itp. Czytając w Internecie dowiedziałem się, że system został zamknięty podczas zamykania procesów, najpierw wysyła znak „ SIGTERM
a”, SIGKILL
jeśli proces się nie zamyka z określonym limitem czasu. Zauważam jednak, że w moim systemie SIGKILL
jest wysyłany natychmiast po nim SIGTERM
i myślę, że jest to przyczyną nieoczekiwanego zakończenia programów.
Znalazłem dokumentację, która (jeśli poprawnie ją odczytam) określa ten limit czasu przed wysłaniemSIGKILL
można ustawić TimeoutStopSec=
opcjonalnie. Również wysyłanie SIGKILL
może być wyłączone przez SendSIGKILL=
opcję. Ale nie mogę znaleźć, gdzie skonfigurować te opcje ... czy istnieje plik konfiguracji systemu zamykania / ponownego uruchamiania systemu, w którym mogę ustawić te opcje?
EDYTOWAĆ:
Zrobiłem test i odkryłem dwie interesujące rzeczy:
- Jeśli ręcznie zamknę Chrome w ten sposób
killall -SIGTERM chrome
, nie będzie narzekać, że nie został poprawnie zamknięty przy następnym uruchomieniu. Jeśli zamiast tego zamknę to w ten sposóbkillall -SIGKILL chrome
, będzie narzekać. To mówi mi, że chrome poprawnie obsługuje SIGTERM. - Patrząc na wynik mojej procedury zamykania, wydruk systemowy
Sending SIGTERM...
natychmiast po nimSending SIGKILL...
Zgodnie z komentarzem poniżej systemd obsługuje tylko swoje procesy. Więc w moim przypadku GDM. To mówi mi, że problemem może być:
- albo GDM nie zamyka poprawnie swoich procesów potomnych (np. Chrome) (tj. wysyłając do nich SIGTERM)
- lub systemd wysyła do GDM komunikat SIGKILL na wczesny czas, nie dając mu czasu na prawidłowe zamknięcie swoich elementów potomnych.
Czy istnieje sposób sprawdzenia / skonfigurowania, w jaki sposób GDM zamyka swoje dzieci?
systemd's
kontrolą - systemd
jest pid 1
- ale Chrome wykonuje skrypt otoki w podpowłoce i wywołuje procesy potomne. Mimo to zrobi wszystko, co konieczne, aby go zabić zygotes
, o ile system jest odpowiednio skonfigurowany. Czy używasz jednego z tych tymczasowych rozwiązań dla Chrome, które znajdziesz w wiki Arch?
gnome-session
.