Dobre pytanie. Próbowałem tego, co teraz zdaję sobie sprawę, że musiałeś spróbować - zaplanować zamknięcie systemu i odpytać o systemowe liczniki czasu!
To pokazało, że zamknięcie nie było w czasach systemowych, jak zauważyłeś. Zatem szybkie przejrzenie źródła systemctl daje nam to wywołanie w ramach halt_main()
:
r = sd_bus_call_method(
b,
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
"ScheduleShutdown",
&error,
NULL,
"st",
arg_action == ACTION_HALT ? "halt" :
arg_action == ACTION_POWEROFF ? "poweroff" :
arg_action == ACTION_KEXEC ? "kexec" :
"reboot",
arg_when);
( systemctl.c linia 7387 )
Wygląda więc na to, że wyłączeniami są obsługiwane przez logind
. Możesz kontynuować śledzenie szczegółów, jeśli chcesz login-dbus.c
. Istnieją metody planowania, anulowania i zarządzania wyłączeniami. Ale dla głębszego zrozumienia, być może będziesz musiał wiedzieć więcej o logind / systemd niż ja.
Krótko mówiąc, informacje o wyłączeniu są przechowywane (przynajmniej) w pliku harmonogramu w /run/systemd/shutdown/scheduled
, moja zawartość jako przykład to:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
Wskazanie czasu (przypuszczalnie w mikrosekundach); czy ostrzegać poprzez wall
i który tryb (cf restart, kexec itp.).
Mam nadzieję, że przynajmniej wskaże ci właściwy kierunek!