Florin Malita wrote:
> Mihai Maties wrote:
>   
>> 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).
>>   
>>     
> Semnalele posix pe post de counter sunt inerent nesigure: nimeni nu-ti
> garanteaza ca nu o sa primesti mai multe semnale inainte ca procesul sa
> primeasca CPU sau ca nu or sa mai aterizeze cateva cand esti in signal
> handler chiar si cu busy-loop-ul ala oribil. Pentru livrare garantata
> forget posix signals & bash, use real time signals.

Ca sa ne convingem cat de "reliable" sunt semnalele posix (dpdv al
livrarii individuale, mai ales cand sunt trimise in burst), un mic
experiment:

[EMAIL PROTECTED] tmp]$ cat tst1.sh 
#! /bin/bash

sig_usr1()
{
        echo $t
        t=$((t+1))
        trap sig_usr1 SIGUSR1
}

trap sig_usr1 SIGUSR1

echo $$
while true; do true; done


[EMAIL PROTECTED] tmp]$ ./tst1.sh 
11462


<in alt terminal>

[EMAIL PROTECTED] mali]$ for ((i=0; i < 100; i++)); do kill -SIGUSR1 11462; done


<inapoi la script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


That's it: 17 semnale primite din 100 :)

---
fm

_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui