GNU/Linux >> Znalost Linux >  >> Linux

Co se stane s výstupem procesu, který byl odmítnut a ztratil svůj terminál?

Pokud zavřu virtuální terminál, kde byl spuštěn nějaký proces, výstup jde rovnou do /dev/null , nebo to může nějak znečišťovat paměť?
Mohu nějakým způsobem uchopit výstup a pokračovat v jeho čtení kdykoli poté?

[EDITACE]:Je tedy okamžik, kdy se zřeknu procesu, v podstatě konec mé moci řídit jeho výstup?

Také jsem si všiml, že pokud odmítnu zastavený proces, zpočátku se vše zdá normální:není ani ukončen, ani zobrazen v úlohách. Ale pokud se odhlásím (a neodhlásím znamená zavřít terminál, jednoduše opustit su například), proces je ukončen. Přesto může proces, který není spuštěn na pozadí, zůstat spuštěn.

Přijatá odpověď:

Skutečnost, že je proces „odmítnut“, má význam pouze pro interaktivní shell, který tento proces vytvořil. Znamená to, že shell nezahrnuje (již) proces ve své tabulce úloh a že SIGHUP nebude odeslán do tohoto procesu, když shell opustí. Ve skutečnosti to nesouvisí s vašimi otázkami.

O tom, co se stane s výstupy, které jsou odeslány na smazaný virtuální terminál:Sám jsem provedl několik testů a všiml jsem si, že /dev/pts/x zařízení nejsou přístupná a nebudou znovu přidělena, dokud nebudou uzavřeny všechny deskriptory souborů, které na ně odkazují. Takže nevidím důvod, proč by se ukládaly zápisy na smazaný terminál. Myslím, že to není ani definováno POSIXem.

O zachycení výstupu nějakého procesu, který zapisuje na terminál, si nemyslím, že je to možné, i když je terminál stále naživu¹. Jediné, co můžete udělat, je uchopit přímý vstup do terminálu (tj. úhozy nebo simulované úhozy hlavní částí pty). Pokud by procesy četly na stdin to, co je zapsáno na jejich terminály, vedlo by to u většiny procesů ke smyčce typu self io.

Ohledně poslední poznámky k ukončení procesu, vlastně nevím, co se děje, ale měl bych podezření na poněkud podivné chování se signály (SIGTTOU, SIGTTIN, SIGHUP, nebo jiné) související se stavem popředí/pozadí skupin procesů, když relace vedoucí ukončí (např. su , ve vámi uvedeném případě).

Odpověď na Upravit: Ne, pokud jde o výstup, nic se nemění, když je proces odmítnut:je stále připojen ke svému řídícímu terminálu (pokud se již neodpojil jako démoni). Můžete to vidět pomocí ps . Nebudete však moci použít fg /bg /jobs příkazy poskytované shellem již pro tento proces. To znamená, že může být obtížné napájet jej vstupem z terminálu (vyžaduje být ve skupině procesů v popředí).

Související:Odebrání ovládacích znaků (včetně kódů / barev konzoly) z výstupu skriptu?



Linux
  1. Jaký je rozdíl v přesměrování výstupu pomocí >, &>, >&a 2&>?

  2. Jaká je definice relace v linuxu?

  3. Jaký je rozdíl mezi ls a l?

  1. Jaký je rozdíl mezi Nepreemptivním, Preemptivním a Selektivním Preemptivním jádrem?

  2. Jak omezit celkové zdroje (paměť) procesu a jeho potomků

  3. Jaký je rozdíl mezi kill , pkill a killall?

  1. Čtěte a zapisujte data odkudkoli s přesměrováním v terminálu Linux

  2. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  3. Jaký je rozdíl mezi unlink a rm?