systemd opera internamente in termini di una coda di "lavori". Ogni lavoro (semplificando un po ') è un'azione da eseguire: arrestare, controllare, avviare o riavviare una determinata unità .
Quando (ad esempio) si ordina a systemd di avviare a un'unità di servizio , viene elaborato un elenco di lavori di arresto e avvio per qualsiasi unità (unità di servizio, unità di montaggio, unità del dispositivo e così via) necessaria per raggiungere tale obiettivo, in base a requisiti e dipendenze delle unità, le ordina, in base alle relazioni di ordinazione delle unità, risolve e (se possibile) corregge eventuali contraddizioni e (se quel passaggio finale ha esito positivo) le inserisce nella coda.
Quindi tenta di eseguire i "lavori" accodati.
È in esecuzione un processo di arresto per la sessione 1 dell'utente xy
Il nome visualizzato dell'unità qui è Session 1 of user xy
. Questa sarà (dal nome visualizzato) un'unità di sessione , non un servizio un'unità di . Questa è l'astrazione della sessione di accesso dello spazio utente gestita dal logind
programma di systemd e dai suoi plugin PAM. È (in sostanza e in teoria) un raggruppamento di tutti i processi che l'utente sta eseguendo come "sessione di accesso" da qualche parte.
Il lavoro che è stato accodato contro di esso è stop
. E probabilmente ci vorrà molto tempo perché la gente del sistema ha erroneamente confuso il blocco della sessione con l' arresto della sessione . Rompono il primo per far funzionare il secondo, e in risposta alcune persone modificano il sistema per rompere il secondo per far funzionare il primo. Le persone sistemiche dovrebbero davvero riconoscere che sono due cose diverse.
Nella tua sessione di accesso, hai qualcosa che ignora SIGTERM
o che richiede molto tempo per terminare una volta che ha visto SIGTERM
. Ironia della sorte, il primo è il comportamento di vecchia data di alcune shell di controllo del lavoro. Il modo corretto di terminare i leader della sessione di accesso quando si tratta di queste particolari shell di controllo del lavoro è di dire loro che la sessione è stata bloccata , quindi terminano tutte le loro lavori (un diverso tipo di lavoro al lavoro interno del sistema) e quindi terminare se stessi.
Quello che sta realmente accadendo è che systemd sta aspettando il timeout di arresto dell'unità fino a quando non ricorre SIGKILL
. Questo timeout è configurabile per unità, ovviamente, e può essere impostato su mai timeout. Ecco perché si possono potenzialmente vedere comportamenti diversi.
Ulteriori letture