Portál AbcLinuxu, 21. května 2025 00:42

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
11.11.2008 23:16 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
Nesouvisí tohle spíš s počtem spuštěných procesů?
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
12.11.2008 09:34 isimluk
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Nemyslím, žr jde až o takovou chybu bashe, ale spíš programátora toho skriptu... ;-)
11.11.2008 23:16 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
9515
Neoprávněný přístup do paměti (SIGSEGV)
marek@mantisha:~> echo $BASH_VERSION
3.2.39(1)-release
marek@mantisha:~>
11.11.2008 23:19 spang
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmm, segfault na 7813 (64-bit bash 3.2.39(1) z testing Debianu). Jinak v tom skriptíku chybí ještě první zavolání té funkce (a recurrent se píše se dvěma 'r' ;-)).
Sjå! Den gamle Buddha-knusern!
11.11.2008 23:21 isimluk
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
Zastavilo se to na 9999, a nepokraču je to dál, pak chvíli nic a legální konec. Žádnej SIGSEGV u mě...

3.2.39(1)-release

bte, nechybí něco v tom skriptíku? ;-) Já jsem si ho musel upravit, aby to vůbec něco dělalo... :-D
11.11.2008 23:47 ondrej | skóre: 7 | blog: zvast
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Zvys si limit, mne to spadlo na 12464 a 12463.
11.11.2008 23:51 PY.gn.EI | skóre: 1
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Taktéž 9999, pak chvilku nic a konec. 3.2.39(1)-release
11.11.2008 23:54 PY.gn.EI | skóre: 1
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Po zvýšení 12465 a 12466
11.11.2008 23:27 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
9027
Neoprávněný přístup do paměti (SIGSEGV)
$ echo $BASH_VERSION
3.2.17(1)-release
$ uname -a
Linux HF 2.6.22-gentoo-r8 #14 Mon Mar 17 21:43:08 CET 2008 i686 Intel(R) Celeron(R) CPU 2.60GHz GenuineIntel GNU/Linux

;-)
Baník pyčo!
11.11.2008 23:46 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
V konsole se uzavře tab, takže z textové konzole to dělá 5755. Bash verze: 3.1.17(2) .
Intel meltdown a = arr[x[0]&1]; karma | 帮帮我,我被锁在中国房
progdan avatar 11.11.2008 23:50 progdan | skóre: 34 | blog: Archař | Teplice/Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
11381
Segmentation fault
[progdan@notas ~]$ echo $BASH_VERSION
3.2.39(1)-release
[progdan@notas ~]$ uname -a
Linux notas 2.6.27-ARCH #1 SMP PREEMPT Sat Nov 8 09:52:52 UTC 2008 x86_64 Intel(R) Core(TM)2 Duo CPU T5250 @1.50GHz GenuineIntel GNU/Linux



PS: Do toho skriptu by to chtelo pridat volani te samotne funkce
Collecting data is only the first step toward wisdom, but sharing data is the first step toward the community.
12.11.2008 00:04 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
PS: Do toho skriptu by to chtelo pridat volani te samotne funkce
To je jen maličká zkouška pozornosti :-)
12.11.2008 01:03 YYY | skóre: 29 | blog: martinek
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
LOL. Koukam, ze cim nizsi verze bashe, tim mene prubehu rekurzi - bash mam 3.1.17 a zastavilo se to na cisle 5754. Jinak mam Amd Sempron 2500+(s754). Na pameti to ale fakt nebylo prakticky znat.
12.11.2008 15:03 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
To nie je celkom pravda. Ja mám 3.00.16 a skončilo to niekde pri 9678. :)

Inak skôr by som tipoval (pokiaľ teda nejde o chybu v bash), že to má nejaký súvis s fragmentáciou pamäte.
12.11.2008 02:02 dfsfsfs
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajímavé. Pro 3.2.33(1)-release pod
Linux f 2.6.25-gentoo-r7 #1 SMP Sun Aug 10 09:24:29 
CEST 2008 x86_64 Intel(R) Core(TM)2 CPU 6400 @
 2.13GHz GenuineIntel GNU/Linux
to dává segmentation fault pro 8441 rekusí za asi 20 sec.

Kdežto pro starý sh ve versi pro
FreeBSD xxx.xxx.xxx.xxx 7.1-PRERELEASE 
FreeBSD 7.1-PRERELEASE #0: Sun Sep  7 17:10:51 CEST 2008
 xxx@xxx.xxx.xxx.xxx:/usr/obj/usr/src/sys/XXX i386
to je plný počet rekursí během 1.2 (!!) sec. (Přitom jsem nahradil podminku [[ ... ]] za: test ...). Sneslo to i omezení na sto tisíc vnoření, víc jsem nezkoušel.

(V obou případech to bylo zdržované vypisem na terminal.)
12.11.2008 06:03 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
No nevim, ale mam pocit ze chybu neudelal tvurce bashe, ale ty :-D To ze to sleti je celkem normalni a pada to protoze dojde stack.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
alblaho avatar 12.11.2008 07:10 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Přesně. Neřídí se to velikostí dostupné paměti, ale velikostí zásobníku. A když dojde, je z toho segfault.
12.11.2008 09:25 zero
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
a ten zvedneme ulimit -s unlimited, pak už jen tak nespadne;)
12.11.2008 10:03 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Eh? To tezko. Pomoci ulimit se nastavuje maximalni objem core dumpu.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
12.11.2008 10:23 Jan Kundrát (jkt) | skóre: 27 | blog: jkt | Praha - Bohnice
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
man bash, vyhledat ulimit (jelikoz je to shell builtin). Dozvite se, ze:
-s The maximum stack size
12.11.2008 11:24 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?

Rychlejší než hledat v několikatisíciřádkovém manuálu je použít vestavěnou nápovědu: help ulimit

13.11.2008 13:10 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
ROFL, tak se ocividne bavime o dvou ruznych ulimitech. Jeden je internim prikazem bashe (ktery nepouzivam) a druhy dela presne to co jsem napsal nahore.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
12.11.2008 09:39 razor | skóre: 33
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
IMHO jakýkoliv segfault je chyba.
12.11.2008 10:05 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
A jak chces osetrit to, ze ti dojde stack? Nevis jak velky stack mas (coz by mozna slo zjistit) a nevis kolik pameti se ti pri volani na stacku alokuje (to pujde zjistit dost tezko).
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
12.11.2008 10:40 Kvakor
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Osetrovat vycerpani zasobniku z vysokourovnoveho jazyka je velmi, velmi obtizne, protoze v okaziku, kdy dojde, nemuzete skoro nic delat, ponevac skoro kazda akce potrebuje zasobnik. Napr. kdyz vam dojde zasobnik v C a chcete zavolat longjmp() (coz by za normalnich okolnosti fungovalo), tak nemuzete, protoze musite na zasobnik ulozit navratovou adresu, aktualni adresu zasobniku a jeste parametry.

Mozne reseni je budto pouzit docasne jiny zasobnik (coz chce minimalne kousek kodu v assembleru), nebo hlidat jeho velikost dopredu (coz vetsinou take potrebuje trochu kodu v assembleru) a skoncit jeste drive, nez se zcela vycerpa, pripadne - jedine ciste vysokourovnover reseni - programove omezit hloubku rekurze.
default avatar 12.11.2008 11:27 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
No tak vošukáš Stack Pointer registr a jedeme dál, ne? :-D (Stačí jen párkrát zavolat POP (E)AX.)
12.11.2008 16:20 razor | skóre: 33
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Možná že by to šlo takto.
12.11.2008 11:49 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?

Assembler jsem opustil někdy v dobách i486, ale není ten zásadní problém, že zatímco na data segment si nikdo nedovolí zapsat bez předchozí alokace, tak na stack segment se vesele zapisuje a optimisticky se očekává, že tam pořád nějaké místo bude.

Má vůbec na x86 smysl omezovat zásobník, ale neomezovat haldu? Vždyť oba jsou ve stejném virtuálním prostoru a operační systém má docela dobrou představu, které stránky jsou alokovány a které vyvolají výjimku.

13.11.2008 13:07 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Rekl bych ze zasadni problem je v tom ze stack je proste pevna pamet (souvisly blok pameti do ktereho nemuze nikdo jiny sahat), nevim zda system vubec poskytuje nejakou moznost jak stack bez restartu programu zvetsit.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
13.11.2008 23:47 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?

Jak říkám, neznám detaily dnešní x86 architektury, ale podle manuálu sigaltstack(2) si mohu požádat operační systém o vytvoření náhradního zásobníku o velikosti, jakou si sám zvolím.

Někde jsem četl pěknou ukázku, jak tuhle službu používat. Zcela normálně se tam ta paměť nejprve malloc()ovala a pak se přes sigaltstack() zaregistrovala. Takže bych řekl, že fyzicky spojitý adresní prostor není třeba.

Podle mě to funguje tak, že ve virtuálním prostoru procesu máte zespoda rostoucí haldu a ze shora o dost pomaleji rostoucí zásobník (i když ten z dlouhodobého hlediska neroste, protože tak fungují dnešní programy). Pokud se procesor pokusí přistoupit za konec alokovaného zásobníku, tak se vyvolá přerušení, operační systém zjistí, že zasažená stránka sousedí se zásobníkem (tzn. zásobník je plný), a tak přialokuje další kus paměti k zásobníku (technicky vzato pouze nastaví atributy stránky), vrátí se do kontextu procesu a procesor restartuje vykonávání instrukce procesu. (Stejný mechanismus jako je obsluha výpadku stránky haldy/textu.)

Avšak pouze ve dvou případech operační systém odmítne prodloužit zásobník: buď se zásobník potkal s haldou (prostě došla paměť), nebo velikost zásobníku dosáhla run-time limit pro velikost zásobníku, který se nastavuje přes ulimit(1)/setrlimit(2). V takovém případě pošle procesu SIGSEGV a pokud proces nemá předchystán náhradní zásobník (siglatstack(2)) nebo neobsluhuje SIGSEGV, tak končí.

K tomu mě vede vzpomínka na manuál k céčkové funkci/makru, která alokuje virtuálně souvislý blok na vrcholu zásobníku, kde je poznámka cosi o dynamicky rostoucím zásobníku, který může potkat haldu. Taktéž existují podivné služby, kterými se mohu dotázat na libovolnou virtuální adresu, mohu nastavovat na daných regionech příznaky (jen pro čtení, nespustitelný) ad.. Takže docela odmítám věřit, že by správa zásobníku zhlediska operačního systému byla tak předpotopně žádná.

13.11.2008 23:50 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
a tak přialokuje další kus paměti k zásobníku (technicky vzato pouze nastaví atributy stránky)

Zapomněl jsem dodat, že také nastaví záznamy v TLB, aby k virtuální stránce existovala fyzická.

12.11.2008 12:18 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Pokud jakýkoliv program skončí na SEGFAULT, tak je chyba vždycky na straně programátora. Je to staré známé "nevěřte uživatelům".
12.11.2008 06:28 Robo
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.

8308 Segmentation fault
12.11.2008 08:48 Miloš Kozák | skóre: 18 | blog: jentak
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
12468
Segmentation fault
milos@raketa:/tmp$ echo $BASH_VERSION
3.2.39(1)-release
12.11.2008 09:01 Tomáš
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
V cygwinu to skončí po 2807 bez chybové hlášky, bash version 3.2.39(19)-release.
Shadow avatar 12.11.2008 09:04 Shadow | skóre: 25 | blog: Brainstorm
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
12464
Neoprávněný přístup do paměti (SIGSEGV)
[user@host ]$ echo $BASH_VERSION
3.2.39(1)-release
If we do not believe in freedom of speech for those we despise we do not believe in it at all.
12.11.2008 10:27 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
Mi to žádnou chybu neháže.
12.11.2008 21:07 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Musíš přidat volání te funkce...
12.11.2008 12:19 boriz | skóre: 4 | Localhost
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Odpovědět | Sbalit | Link | Blokovat | Admin
ubuntu 8.04 projde bez jakekoliv chyby... cim to bude? zkousel jsem jak v tty tak v emulatoru terminalu
I slackwaristi maji sve dny
12.11.2008 12:23 boriz | skóre: 4 | Localhost
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
mimochodem 3.2.39(1)-release asi uz to soudruzi opravili
I slackwaristi maji sve dny
12.11.2008 15:09 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
Ide skutocne o velkost zasobnika. Vyssie uvedena rada s ulimit -s unlimited zaberie. Mozno je v Ubuntu nastaveny defaultne inak. Limit je dostatocne velky, ale aj tak by som uvital nejake ine riesenie, nez spadnut na SEGFAULT.
If you hold a Unix shell up to your ear, you can you hear the C.
default avatar 12.11.2008 15:51 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
by som uvital nejake ine riesenie
Převést na cyklus? ;-)
12.11.2008 19:19 boriz | skóre: 4 | Localhost
Rozbalit Rozbalit vše Re: Rekurzia v Bashi. Alebo: Koľko je to "no limit"?
nepomohlo.... nepomohlo
I slackwaristi maji sve dny

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.