Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem linux shell: Ctrl+Z + bg/fg přeruší smyčku

Nemohu přijít na klub záhadě vlinuxovém shellu (bash). Když spustím uvedený kód číslo 1. tak po stisku Ctrl+Z a následnému přesunu do pozadí (bg) nebo (fg), se stane, že dále už cyklus nepokračuje Zajímalo by mě proč.
Ostatně se tedy zeptám, co vlastně Ctrl+Z pozastaví a co se v shellu děje poté? V tom asi bude zakopaný pes. (Protože po stisku Ctrl+Z, když je úloha pauzlá, si pomocí jobs zobrazím, ale ukáže mi to sleep bez vnější smyčky, což budí podezření, že zde něco nefunguje, jak bych očekával. A smyčka se jaksi vypaří.

Proč tedy po Ctrl+Z "se ztratí" kontext smyčky? Dá se to nějak srozumitelně vysvětlit? Podobný příklad je sleep 4 ; sleep 5 ; sleep 6 (nějak to s tím souvisí)

Samozřejmě jsem sem dal i další příklady: čísla 2 a 3 jsou proti tomu imunní, jelikož se spustí v subshellu . A jaksi úloha v subshellu je z principu nedělitelná. Ale to jen pro ilustraci.

Jednu stranu problému nechápu ( Proč Ctrl+Z+fg rozříští smyčku) ,ale opačnou ano ( obalení do subshellu způsobí netříštitelnost)

 
#1.
while (true) do echo  3315 ; sleep 2 ; done 
Ctrl z

jobs
# vrátí sleep,,,, to je divné
fg neb bg
#skončí

#2
#OK
while (true) do echo  3315 ; sleep 2 ; done &
jobs vrací while..done

#3
#OK
( while (true) do echo  3315 ; sleep 2 ; done )
CtrlZ
jobs vrací while...true
fg
#běží dál
Předmět Autor Datum
Vždyť každý příklad je poměrně jasný, proč to ukazuje co to ukazuje.
touchwood 22.04.2020 20:34
touchwood
Případy 2 A 3 chápu, to jsem psal.
kapole 23.04.2020 10:16
kapole
a případ 1 je přece nejjednodušší. Tam nic jako "cyklus" v daném okamžiku není, drtivou většinu času… poslední
touchwood 23.04.2020 10:56
touchwood
pokračování (zřejmě jsem zůstal nepochopen) je třeba uvědomit si, co je: - přerušení běžně spuštěné…
touchwood 22.04.2020 22:22
touchwood

a případ 1 je přece nejjednodušší. Tam nic jako "cyklus" v daném okamžiku není, drtivou většinu času ten cyklus čeká na konec sleepu (takže když ho zastavíš, máš 99,99% šanci, že bude v sleepu; a zastavením se logicky ukončí smyčka, protože jsi to nespustil v dalším nezávislém prostředí). Nejedná se ani o další shell, ani o skript na pozadí.

Zpět do poradny Odpovědět na původní otázku Nahoru