🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
11 messages
11 total messages Started by Marcin L Fri, 05 Apr 2013 11:33
Jaki sygnal mnie przerywa?
#72637
Author: Marcin L
Date: Fri, 05 Apr 2013 11:33
17 lines
1373 bytes
Witam,

Mam dobrze dzialajacy program, ale czasem wywolywane przez niego funkcje
'read' lub 'select' sa przerywane sygnalem. Zwracaja blad i erron=EINTR.

Jak moge sie dowiedziec co to za sygnal? Podejrzewam, ze to jakis sygnal
wykorzytwany przez zalaczona do programu biblioteke 'libsdl' wiec podpiecie
sie pod wszelkie mozliwe sygnaly raczej nie wchodzi w gre - bo libsdl-owi do
czegos pewnie potrzebne skoro korzysta.

Pozdrawiam,
Marcin

-- 
ml

http://www.archimedes.eu.org/
Re: Jaki sygnal mnie przerywa?
#72638
Author: Michoo
Date: Fri, 05 Apr 2013 14:47
22 lines
1690 bytes
On 05.04.2013 13:33, Marcin L wrote:
> Witam,
>
> Mam dobrze dzialajacy program, ale czasem wywolywane przez niego funkcje
> 'read' lub 'select' sa przerywane sygnalem. Zwracaja blad i erron=EINTR.

Prawidłowo. Zachowujesz się wtedy zgodnie z tym co napisano w manualu, 
prawda? Więc jaki jest problem?

>
> Jak moge sie dowiedziec co to za sygnal? Podejrzewam, ze to jakis sygnal
> wykorzytwany przez zalaczona do programu biblioteke 'libsdl' wiec podpiecie
> sie pod wszelkie mozliwe sygnaly raczej nie wchodzi w gre - bo libsdl-owi do
> czegos pewnie potrzebne skoro korzysta.

To co? Podpinasz, logujesz, wywołujesz poprzedni handler. (A obstawiam 
np. alarm.)


-- 
Pozdrawiam
Michoo
Re: Jaki sygnal mnie przerywa?
#72639
Author: Marcin L
Date: Tue, 28 May 2013 06:13
25 lines
1966 bytes
Dnia 05.04.2013 Michoo <michoo_news@vp.pl> napisał/a:
> On 05.04.2013 13:33, Marcin L wrote:
>> Mam dobrze dzialajacy program, ale czasem wywolywane przez niego funkcje
>> 'read' lub 'select' sa przerywane sygnalem. Zwracaja blad i erron=EINTR.
> Prawidłowo. Zachowujesz się wtedy zgodnie z tym co napisano w manualu, 
> prawda? Więc jaki jest problem?
>
>> (...)
>
> To co? Podpinasz, logujesz, wywołujesz poprzedni handler. (A obstawiam 
> np. alarm.)

A ja obstawiam SIGTTIN albo SIGOUT.... Sorki, ale pytanie brzmi: jak pod
Linux-em sprawdzic, który sygnal przerywa program, a nie zgaduj zgadula.

Mozna ustawiac handlery, ale roznuch sygnalow jest chyba ze 64 i nie ma
gwarancji, ze w przyszlych jadrach na ktorych moze moj program dzialac nie
bedzie ich wiecej. I co wtedy? Poza tym - co zrobic kiedy chcemy to
sprawdzic na juz skompilowanym programie?...


-- 
ml

http://www.archimedes.eu.org/
Re: Jaki sygnal mnie przerywa?
#72640
Author: orcus
Date: Tue, 28 May 2013 06:53
11 lines
1349 bytes
On 28.05.2013, Marcin L <"xxxl kropka marcin"@gmail.com> wrote:
> Mozna ustawiac handlery, ale roznuch sygnalow jest chyba ze 64 i nie ma
> gwarancji, ze w przyszlych jadrach na ktorych moze moj program dzialac nie
> bedzie ich wiecej. I co wtedy? Poza tym - co zrobic kiedy chcemy to
> sprawdzic na juz skompilowanym programie?...

Prawdopodobnie debugfs w kernelu i event tracing bedzie pomocny.

-- 
Pozdrawiam
orcus
Re: Jaki sygnal mnie przerywa?
#72641
Author: Michoo
Date: Tue, 28 May 2013 12:05
39 lines
2392 bytes
On 28.05.2013 08:13, Marcin L wrote:
> Dnia 05.04.2013 Michoo<michoo_news@vp.pl>  napisał/a:
>> On 05.04.2013 13:33, Marcin L wrote:
>>> Mam dobrze dzialajacy program, ale czasem wywolywane przez niego funkcje
>>> 'read' lub 'select' sa przerywane sygnalem. Zwracaja blad i erron=EINTR.
>> Prawidłowo. Zachowujesz się wtedy zgodnie z tym co napisano w manualu,
>> prawda? Więc jaki jest problem?
>>
>>> (...)
>>
>> To co? Podpinasz, logujesz, wywołujesz poprzedni handler. (A obstawiam
>> np. alarm.)
>
> A ja obstawiam SIGTTIN albo SIGOUT.... Sorki, ale pytanie brzmi: jak pod
> Linux-em sprawdzic, kt�ry sygnal przerywa program, a nie zgaduj zgadula.

Toż napisałem jak sprawdzić... Myślałem, że chodzi ci o szybkie 
rozwiązanie ale biorąc pod uwagę po jakim czasie odpisujesz...

>
> Mozna ustawiac handlery, ale roznuch sygnalow jest chyba ze 64 i nie ma
> gwarancji, ze w przyszlych jadrach na ktorych moze moj program dzialac nie
> bedzie ich wiecej. I co wtedy?

        sighandler_t signal(int signum, sighandler_t handler);

ERRORS
        EINVAL signum is invalid.

for(int i=1;i<2<<16;i++);

> Poza tym - co zrobic kiedy chcemy to
> sprawdzic na juz skompilowanym programie?...

Użyć innej metody? Użyć LD_* do wstrzyknięcia kodu? Pomyśleć?

-- 
Pozdrawiam
Michoo
Re: Jaki sygnal mnie przerywa?
#72645
Author: Pawel Lampe
Date: Tue, 28 May 2013 20:37
4 lines
1066 bytes
Użyj: strace ./twojProgram

...a potem google
Re: Jaki sygnal mnie przerywa?
#72642
Author: Marcin L
Date: Mon, 10 Jun 2013 07:05
17 lines
1992 bytes
Dnia 28.05.2013 Michoo <michoo_news@vp.pl> napisał/a:
> Toż napisałem jak sprawdzić... Myślałem, że chodzi ci o szybkie 
> rozwiązanie ale biorąc pod uwagę po jakim czasie odpisujesz...
To chyba nie ma znaczenia w rozwiazaniu problemu...

> ERRORS
>         EINVAL signum is invalid.
>
> for(int i=1;i<2<<16;i++);
Eeeee... Jesli juz to to nie 2^16 tylko 2^6. Poa tym i!=SIGKILL i ktorys
jeszcze. No i z ';' na koncu to na pewno sie nic nie osiagnie :-)

>> Poza tym - co zrobic kiedy chcemy to
>> sprawdzic na juz skompilowanym programie?...
>
> Użyć innej metody? Użyć LD_* do wstrzyknięcia kodu? Pomyśleć?
Mysle. Wy rowniesz. I problem w tym, ze efektow nie widac.
Re: Jaki sygnal mnie przerywa?
#72646
Author: Marcin L
Date: Mon, 10 Jun 2013 07:07
19 lines
1630 bytes
Dnia 28.05.2013 Pawel Lampe <scony@sconysoft.com> napisał/a:
>
> Użyj: strace ./twojProgram
>
> ...a potem google

Eee... strace tego nie pokaze(?). Program: "main(){char c;read(0, &c, 1);}"
ubity 'kill -INT':

.....
set_thread_area({entry_number:-1 -> 6, base_addr:0xb757d6c0, limit:1048575,
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1,
seg_not_present:0, useable:1}) = 0
mprotect(0xb76db000, 8192, PROT_READ)   = 0
mprotect(0xb770b000, 4096, PROT_READ)   = 0
munmap(0xb76e2000, 42451)               = 0
read(0,  <unfinished ...>

I tylko tyle.
Re: Jaki sygnal mnie przerywa?
#72643
Author: orcus
Date: Mon, 10 Jun 2013 12:49
17 lines
1591 bytes
On 10.06.2013, Marcin L <"xxxl kropka marcin"@gmail.com> wrote:
> Mysle. Wy rowniesz. I problem w tym, ze efektow nie widac.

Przecież dałem Ci wędkę wymagającą jedynie roota ale chyba ją
zignorowałeś.

mount -t debugfs none /sys/kernel/debug
echo "pid==pid_twojego_programu" > /sys/kernel/debug/tracing/events/signal/signal_generate/filter
echo 1 > /sys/kernel/debug/tracing/events/signal/signal_generate/enable
cat /sys/kernel/debug/tracing/trace

Możesz oczywiście zapisywać tam wszystkie sygnały ale pewnie domyślasz
się ile tego będzie.

-- 
Pozdrawiam
orcus
Re: Jaki sygnal mnie przerywa?
#72647
Author: Michoo
Date: Mon, 10 Jun 2013 16:23
25 lines
1471 bytes
On 10.06.2013 09:07, Marcin L wrote:
> Dnia 28.05.2013 Pawel Lampe<scony@sconysoft.com>  napisał/a:
>>
>> Użyj: strace ./twojProgram
>>
>> ...a potem google
>
> Eee... strace tego nie pokaze(?).

Pokaże.

> Program: "main(){char c;read(0,&c, 1);}"
> ubity 'kill -INT':
>

To teraz pomyśl co ubiłeś.

>
> I tylko tyle.

No niestety wygląda na to, że się nie da.

-- 
Pozdrawiam
Michoo
Re: Jaki sygnal mnie przerywa?
#72644
Author: Michoo
Date: Mon, 10 Jun 2013 16:40
45 lines
2465 bytes
On 10.06.2013 09:05, Marcin L wrote:
> Dnia 28.05.2013 Michoo<michoo_news@vp.pl>  napisał/a:
>> Toż napisałem jak sprawdzić... Myślałem, że chodzi ci o szybkie
>> rozwiązanie ale biorąc pod uwagę po jakim czasie odpisujesz...
> To chyba nie ma znaczenia w rozwiazaniu problemu...
>
>> ERRORS
>>          EINVAL signum is invalid.
>>
>> for(int i=1;i<2<<16;i++);
> Eeeee... Jesli juz to to nie 2^16

Jakie 2^16?

> tylko 2^6. Poa tym i!=SIGKILL i ktorys
> jeszcze.

Tak, bo to przecież oczywiste, że select jest przerywany przez SIGKILL z 
EINTR.

Poza tym znowu nie zrozumiałeś - signal można nakarmić dowolną wartością 
i jeżeli okaże się ona nieprawidłowa to zwróci EINVAL. Tak więc twój 
tekst o zwiększaniu ilości sygnałów jest inwalidą.

> No i z ';' na koncu to na pewno sie nic nie osiagnie :-)

No shit, sherlock!

>
>>> Poza tym - co zrobic kiedy chcemy to
>>> sprawdzic na juz skompilowanym programie?...
>>
>> Użyć innej metody? Użyć LD_* do wstrzyknięcia kodu? Pomyśleć?
> Mysle.

A efektów nie ma. Ciekawe, nie?

> Wy rowniesz. I problem w tym, ze efektow nie widac.

Miałem podobny problem ponad 6 lat temu,rozwiązałem i zająłem się czymś 
innym.

-- 
Pozdrawiam
Michoo
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads