[SOLVED] bash script lassítása

Van-e arra valamilyen mód a "sleep" parancsot leszámítva, amivel tudnám egy bash script futását lassítani 1-2 mp-re ciklusonként.

Hozzászólások

kérdés az miért nem jó a sleep parancs

Miért nem jó a sleep? Pont erre való!
> Sol omnibus lucet.

Ha 386-oson futtatod 16MB RAM-al, floppy-ról, az lassítja. :)

Másik lehetőség: kihagyod a ciklust, és crontab-ból két másodpercenként indítod. Ettől bonyolultabb lesz a script, de esetleg működhet. :)

Meg látom vannak itt más jó ötletek is. :)

Ennyire nagy gáz lenne az a sleep?

---
"A megoldásra kell koncentrálni nem a problémára."

Csinálsz egy démont ami 1/1000 processzor időben fut és tkp. bash shell, aztán a .slow végű scripteket ezzel futtatod.

Úgy vagyok ezzel a tanáccsal, mint a tojással: tudom, hogy milyennek kell lennie - de tojni nem tudok ilyet.

Egy "for" ciklusnál nembiztos hogy szerencsés a "sleep", esetleg betöltődik 1000 példányba!? :)

Ez a megoldás jobban tetszett:

/*
* The following program sleeps for the
* number of microseconds specified in argv[1].
*/
#include
#include

int main( int argc, char **argv )
{
useconds_t microseconds;

microseconds = (useconds_t)strtol( argv[1], NULL, 0 );
if( usleep( microseconds ) == 0 ) {
return EXIT_SUCCESS;
}

return EXIT_FAILURE;
}

gcc-vel lefordítva pedig ./usleep 1000000 (ez kb 1 mp)

Nem zavar, hogy az ezen oldal fo profiljaba vago rendszereken az idoosztasos viselkedes miatt ha *nem* realtime prioritassal futtatsz valamit, akkor nem nagyon tudod ezt a dolgot pontositani? Eleve hogyan teszteled? Mi biztositja, hogy a tesztelo gep HW-kornyezete es a valodi futtato gepe megegyezik? Mi biztositja, hogy az eles rendszer eppen nem lesz baromira leterhelve, stb?

Termeszetesen semmi, de nyilvan, aki ennyire pontos idozitest akar, az figyel az ilyesmire is.

En elsosorban arra probaltam celozni, hogy a sleep tobb rendszeren csak masodperc finomsagu idozitest tesz lehetove, ennel finomabbat nem. Nem kell mindig valami elszallt realtime dologra gondolni, de sokszor 1 masodperc rengeteg varakozast jelent, es bash scriptben ugye nincs olyan, mint ASM-ben a halt, ami epp csak egy ciklusnyi idore all meg, teret adva a tobbi dolognak, peldaul a kepernyore irasnak.

Jo, persze, tudom, aki ilyesmit akar hasznalni, az hasznaljon GNU sleep-et, mert az erti a tizedmasodperces megallast is. De ezt a par soros C progit gyorsabb megirni.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Mar csak arra nem hallottunk semmit, hogy ha amugy 1-2 masodperces varakozas kell, akkor miert nem jo a sleep? Pedig talan az is erdekes lehet. (Radasul nem nagyon latom, hogy lehetne a korabbi felvetesemben emlegetett "tulterheli valami a rendszert" ellen vedekezni. Ha csak egyetlen user van meg rajta kivul a gepen, ha csak egyetlen szolgaltatast is futtat, mar elvileg bukta.)

Ha valaki vmi pontos idozitesu cuccot futtat, akkor tudjon mar annyira odafigyelni a gepere, hogy ne forgasson kozben Qt-t. Egyebkent egy plusz szolgaltatas futtatasa meg nem kizaro ok, ha az nem termel szamottevoen.

A sleep jo lehet - ha van. De ha veletlen valamiert nincs (pl. a busyboxba nem kerult beforgatasra) akkor szopacs van.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Igen, légyszi-légyszi... nálam a man sleep: "Unlike most implementations that require NUMBER be an integer, here NUMBER may be an arbitrary floating point number." (GNU coreutils 6.9.92.4-f088d-dirty)

Persze ennek a megoldásnak a hordozhatósága némiképp megkérdőjelezhető, lehet h olyan környezet van, ahol nincs (ilyen) coreutils.

Egy debian linuxot futtató gépről van szó (AMD Geode procis), aminek speciális a kijelzője (USB-s csatlakozása van).
C-ben lehetne igazán kihasználni a dolgokat, csak külön sdk meg minden kell hozzá és gondoltam erre a célra egyszerübb egy bash script.

Csak néhány terminál parancsot fogad el
pl.
\\033[2J - képernyőtörlés
\\033[0H - Bal felső pozició (Home)

A többi általánosságban használt parancsot nem sikerült használnom (mint pl. sortörlés)

Sajna ha egy ciklussal iratok ki a képernyőre iszonyatosan villog az egész, illetve néha megjelenik ugyanaz a sor mégegyszer előtte a [0H karakterekkel,
tehát a kijelző valamiért nem szereti a gyorsan kapott adatokat, ezért jött jól ez az usleep progi amivel microsecundumban megadott időket használhatok.
Például nálam már a 100000 mikrosec (0.1 sec) jó megoldást hozott

Az a baj, hogy magával a kijelzővel kommunikálni egy a fejlesztő által adott daemon/socket -en keresztül lehetséges.
Kb. echo -e "Szöveg" > /tmp/kijelzo_daemon