GNU/Linux >> Znalost Linux >  >> Linux

Co přesně je „zastavení úlohy“, jako v „zastavení úlohy běží…“?

Po vydání příkazu k vypnutí se někdy zobrazí stavová zpráva, jako je tato:

A stop job is running for Session 1 of user xy

a pak se systém na chvíli zablokuje nebo navždy v závislosti na ???

Co tedy přesně je „úloha zastavení“?

Proč také někdy odhaduje čas, který to bude trvat, docela přesně, a jindy může běžet věčně?

Přijatá odpověď:

systemd funguje interně ve smyslu fronty „úloh“. Každá úloha (trochu zjednodušeně) je akce, kterou je třeba provést:zastavit, zkontrolovat, spustit nebo restartovat konkrétní jednotku .

Když (například) dáte systemd pokyn ke spuštění servisní jednotky , vypracuje seznam úloh zastavení a spuštění pro jakékoli jednotky (servisní jednotky, montážní jednotky, jednotky zařízení atd.), které jsou nezbytné k dosažení tohoto cíle, podle požadavků na jednotky a závislostí, seřadí je podle vztahů uspořádání jednotek , vyřeší a (pokud je to možné) napraví případné rozpory a (pokud je tento poslední krok úspěšný) zařadí je do fronty.

Poté se pokusí provést zadané „úlohy“.

Pro relaci 1 uživatele xy

běží úloha zastavení

Zobrazovaný název jednotky zde je Session 1 of user xy . Toto bude (podle zobrazovaného názvu) relace jednotku, nikoli službu jednotka. Toto je abstrakce přihlašovací relace uživatelského prostoru, kterou spravuje logind systemd program a jeho PAM pluginy. Je to (v podstatě a teoreticky) seskupení všech procesů, které daný uživatel někde spouští jako „přihlašovací relace“.

Úloha, která proti němu byla zařazena do fronty, je stop . A pravděpodobně to trvá dlouho, protože lidé ze systému omylem spojili relaci zavěšení s vypnutím relace . Rozbijí první, aby přiměli to druhé, aby fungovalo, a v reakci na to někteří lidé změní systém, aby rozbili to druhé, aby přiměli fungovat první. Systemd lidé by měli skutečně uznat, že jsou to dvě různé věci.

Ve své přihlašovací relaci máte něco, co ignoruje SIGTERM nebo to trvá dlouho, než se ukončí, jakmile uvidí SIGTERM . Je ironií, že první je dlouhodobým chováním některých skořápek na kontrolu práce. Správný způsob, jak ukončit vedoucí relace přihlášení, když se jedná o tyto konkrétní shelly pro řízení úloh, je sdělit jim, že relace byla zavěšena , načež ukončí všechny jejich úlohy (jiný druh úlohy než interní úloha systemd) a poté samy ukončí.

Související:Linux – Terminál Gnome se nespustí?

Ve skutečnosti se děje to, že systemd čeká na vypršení časového limitu zastavení jednotky dokud se neuchýlí k SIGKILL . Tento časový limit je samozřejmě konfigurovatelný na jednotku a lze jej nastavit tak, aby nikdy nevypršel. Proto může člověk potenciálně vidět různé chování.

Další čtení

  • Lennart Poettering (2015). systemd. systémové manuálové stránky. Freedesktop.org.
  • Jonathan de Boyne Pollard (2016-06-01). systemd ukončí procesy na pozadí po odhlášení uživatele . 825394. Debian bug tracker.
  • Lennart Poettering (2015). systemd.kill. systémové manuálové stránky. Freedesktop.org.
  • Lennart Poettering (2015). systemd.service. systémové manuálové stránky. Freedesktop.org.
  • Proč bash ignoruje SIGTERM?
  • https://superuser.com/questions/1102242/

Linux
  1. Jak zastavit proces obrazovky v linuxu?

  2. Jak zastavit službu systemd

  3. Jaká je definice relace v linuxu?

  1. Co přesně určuje, zda je úloha na pozadí při opuštění shellu zabita nebo zabita?

  2. Co přesně je <() v bash (a =() v zsh)?

  3. iptables:co přesně znamená --src-type LOCAL?

  1. Co je to vlastně AVAHI?

  2. Co přesně init dělá?

  3. Wordpress - Příprava na pracovní pohovor WordPress