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