On Monday 17 July 2006 17:12, Tarhon-Onu Victor wrote:
> On Mon, 17 Jul 2006, Vali Dragnuta wrote:
> > Asa dadea direct din script suspend, insa ceva imi spune ca el vrea sa
> > agate mai multe semnale si in functie de ce semnal primeste sa faca
> > diverse lucruri. Iar cu sigstop/suspend executia se reia doar la
> > sigcont.
>
> #!/bin/bash
>
> trap f1 2;
> trap alo_politia 11 15;
>
> ca_porcul=69;
>
> f1() {
> echo sigint;
> echo fa ceva;
> }
>
> alo_politia() {
> echo ce puii mei\?\! Apa la cpu\?\?;
> exit;
> }
>
> while /bin/true; do
> # sleep $ca_porcul;
> read k;
> done
>
> Ceva de genul asta?
Nu chiar, mai clar scriptul initial ar fi:
<--- BEGIN --->
#!/bin/bash
t=1
sig_usr1() {
echo $t
((t++))
}
trap sig_usr1 SIGUSR1
while : ; do
: # linia buclucasa
done
</--- END --->
In felul asta, la fiecare trimitere de SIGUSR1 catre script se va afisa un
numar. Partea proasta e ca datorita "while-ului" din final procesorul se duce
spre Nirvana. Daca inlocuim "linia buclucasa" din 'while' cu un sleep X
atunci avem sanse sa pierdem tratarea unor semnale (i.e. daca punem "sleep 1"
si trimitem 3 semnale pe secunda, numai unul va fi tratat).
Daca am inteles corect problema se pune astfel: cum rescriem scriptul de mai
sus astfel incat sa nu se piarda semnale, dar nici sa nu omoare procesorul ?
Probabil ca o solutie ar fi folosirea unui job aditional + wait.
Mihai
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug