Portál AbcLinuxu, 7. května 2025 01:20

Dotaz: BASH a beh na pozadi

19.9.2011 13:54 ext3fs
BASH a beh na pozadi
Přečteno: 402×
Odpovědět | Admin
ahoj, resim nesledujici problem:
funkce(){
  for((;;))
    if pidof $1;
    then
      ...
    else
      return
  done
}

lzma -c sobor&
funkce "lzma"
...
Chova se to tak, ze skript neskonci, jako by se po ukonceni lzma nevratil z funkce k vykonani dalsiho kodu. Vite nekdo kde je problem?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.9.2011 14:21 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Odpovědět | | Sbalit | Link | Blokovat | Admin
az na tu neuplnost a chybi v syntaxi by to v principu melo fungovat:

[root@f15-devel ~]# funkce(){ for((;;)); do if pidof $1 > /dev/null; then echo -n .; sleep 1; else return; fi; done } [root@f15-devel ~]# sleep 10& [1] 1272 [root@f15-devel ~]# funkce "sleep" ........[1]+ Done sleep 10 [root@f15-devel ~]#
19.9.2011 14:22 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
ehh s/chybi/chyby/ :(
19.9.2011 14:26 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
teda pokud tam treba tech lzma procesu neni vic, ono by bohate stacilo: sleep 10& wait
19.9.2011 14:32 ext3fs
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Nevim,ale tan muj skript vytuhne zde:
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 11413
wait4(-1, 0x7fff25cb3e1c, WNOHANG, NULL) = 0
rt_sigreturn(0xffffffffffffffff)        = -1 EINTR (Interrupted system call)
read(3,
19.9.2011 14:37 ext3fs
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Jinak original for vypada takto:
 for ((;;));
    do
        PID=$(pidof "$PK_BIN")

        if [ -n "$PID" ];
        then
            SIZE_C=$(stat $FILE_E --printf "%s")
            SPEED_B=$((SIZE_C-SIZE_P))

            if [ $SPEED_B -gt 1000000 ];
            then
                SPEED=$(awk '{printf "%.1f MB/s", $SPEED_B/1000/1000}')
            elif [ $SPEED_B -gt 1000 ] && [ $SPEED_B -le 999999 ];
            then
                SPEED=$(awk '{printf "%.1f KB/s", $SPEED_B/1000}')
            else
                SPEED="$SPEED_B B/s"
            fi

            if [ $N -eq 10 ];
            then
                test -t 1 && printf "    hotovo : %d byte z %d [%s]\r" $SIZE_C $SIZE_S $SPEED
                N=0
            fi
            ((N++))
            SIZE_P=$SIZE_C
            sleep 0.1
        else
            SIZE_C=$(stat $FILE_E --printf "%s")
            test -t 1 && printf "    hotovo : %d byte [--] spracovano za %s\n" "$SIZE_S" "$(date +%M:%S -d @$(($(date +%s)-$TIME_S)))"
            
            break
            fi
    done
...
19.9.2011 15:26 marek
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobry den.

Je nejaky duvod, proc posilate funkci jmeno procesu a ne jeho cislo?

funkce(){
while [ -d "/proc/$1" ] 
do 
   .......
 
done
}

lzma -c sobor&
funkce $!

Precejenom je vetsi pravdepodobnost, ze tam bude proces se stejnym jmenem, nez cislem.

Marek

19.9.2011 21:10 oiufoj
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zrejme je tam tech lzma v nazvech vic. Obecne bude veci nahody jestli to vrati spravny kod.

Pokud to ma vykonat nejakou akci po skonceni programu je lepsi odchytavat SIGCHILD signal a navazat na to nejakou funkci pomoci trap. Naprosto nahodna linka ukazujici jak se to dela: Trap.
20.9.2011 11:24 tonda
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Odpovědět | | Sbalit | Link | Blokovat | Admin
co se vlasne snazite udelat to funkci? jen pockat na dokonceni processu aby se nevytvoril zombie?
20.9.2011 11:50 ext3fs
Rozbalit Rozbalit vše Re: BASH a beh na pozadi
Ne, ma to byt progressbar pro proces archivace souboru.

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.