systemd działa wewnętrznie pod względem kolejki „zadań”. Każde zadanie (nieco upraszczając) to czynność do wykonania: zatrzymanie, sprawdzenie, uruchomienie lub ponowne uruchomienie określonej jednostki .
Kiedy (na przykład) instruujesz systemd, aby uruchomił jednostkę serwisową , opracowuje listę zadań zatrzymania i uruchomienia dla dowolnych jednostek (jednostek serwisowych, jednostek montażowych, jednostek urządzeń itd.), Które są niezbędne do osiągnięcia tego celu, zgodnie z wymagania i zależności jednostek, porządkuje je zgodnie z relacjami zamawiania jednostek, opracowuje i (jeśli to możliwe) naprawia wszelkie sprzeczności i (jeśli ten ostatni krok się powiedzie) umieszcza je w kolejce.
Następnie próbuje wykonać kolejkowane „zadania”.
Zadanie zatrzymania jest uruchomione dla sesji 1 użytkownika xy
Jednostka nazwę wyświetlaną tutaj jest Session 1 of user xy
. Będzie to (z nazwy wyświetlanej) jednostka sesyjna , a nie jednostka serwisowa . Jest to abstrakcja sesji logowania w przestrzeni użytkownika, która jest utrzymywana przez logind
program systemd i jego wtyczki PAM. Jest to (zasadniczo i teoretycznie) zgrupowanie wszystkich procesów, które ten użytkownik uruchamia gdzieś jako „sesję logowania”.
Zadanie, które zostało zakwalifikowane przeciwko niemu, to stop
. I to prawdopodobnie trwa długo, ponieważ Systemd ludzie błędnie utożsamił sesji rozłączenia z sesji zamykania . Łamią to pierwsze, aby drugie działało, aw odpowiedzi niektórzy ludzie zmieniają system, aby złamać ten drugi, aby pierwszy działał. Systematyczni ludzie naprawdę powinni rozpoznać, że są to dwie różne rzeczy.
Podczas sesji logowania masz coś, co ignoruje SIGTERM
lub którego zakończenie zajmuje dużo czasu, gdy to zobaczysz SIGTERM
. Jak na ironię, ta pierwsza to długotrwałe zachowanie niektórych powłok kontrolujących pracę. Prawidłowym sposobem zakończenia liderów sesji logowania, gdy są one tymi konkretnymi powłokami kontroli zadań, jest poinformowanie ich, że sesja została zawieszona , po czym kończą wszystkie swoje zadania (zadanie innego rodzaju niż wewnętrzne zadanie systemowe), a następnie zakończyć się.
Faktycznie dzieje się tak, że systemd czeka na przekroczenie limitu czasu zatrzymania urządzenia, aż zacznie się uciekać SIGKILL
. Ten limit czasu można oczywiście skonfigurować dla każdej jednostki i można go ustawić tak, aby nigdy nie przekraczał limitu czasu. Dlatego potencjalnie można zobaczyć różne zachowania.
Dalsza lektura