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?
Author: Marcin L
Date: Fri, 05 Apr 2013 11:33
Date: Fri, 05 Apr 2013 11:33
17 lines
1373 bytes
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?
Author: Michoo
Date: Fri, 05 Apr 2013 14:47
Date: Fri, 05 Apr 2013 14:47
22 lines
1690 bytes
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?
Author: Marcin L
Date: Tue, 28 May 2013 06:13
Date: Tue, 28 May 2013 06:13
25 lines
1966 bytes
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?
Author: orcus
Date: Tue, 28 May 2013 06:53
Date: Tue, 28 May 2013 06:53
11 lines
1349 bytes
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?
Author: Michoo
Date: Tue, 28 May 2013 12:05
Date: Tue, 28 May 2013 12:05
39 lines
2392 bytes
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?
Author: Pawel Lampe
Date: Tue, 28 May 2013 20:37
Date: Tue, 28 May 2013 20:37
4 lines
1066 bytes
1066 bytes
Użyj: strace ./twojProgram ...a potem google
Re: Jaki sygnal mnie przerywa?
Author: Marcin L
Date: Mon, 10 Jun 2013 07:05
Date: Mon, 10 Jun 2013 07:05
17 lines
1992 bytes
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?
Author: Marcin L
Date: Mon, 10 Jun 2013 07:07
Date: Mon, 10 Jun 2013 07:07
19 lines
1630 bytes
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?
Author: orcus
Date: Mon, 10 Jun 2013 12:49
Date: Mon, 10 Jun 2013 12:49
17 lines
1591 bytes
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?
Author: Michoo
Date: Mon, 10 Jun 2013 16:23
Date: Mon, 10 Jun 2013 16:23
25 lines
1471 bytes
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?
Author: Michoo
Date: Mon, 10 Jun 2013 16:40
Date: Mon, 10 Jun 2013 16:40
45 lines
2465 bytes
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