SIGTERM v Jave

2009-07-23 Thread Dusan Zatkovsky
Ahoj.

Mam dost vazny problem so zachytavanim signalov v jave.

V konzolovej aplikacii potrebujem garantovat, ze sa mi vykona urcity blok 
kodu. Akekolvek prerusenie vo vnutre tohoto bloku je povazovane za fatalnu 
chybu, ktoru treba potom rucne riesit. Tento blok sa vykonava cyklicky.

Ja teraz potrebujem mat moznost tu aplikaciu rucne zastavit pomocou ctrl+c. 
Problem je, ze aj nasledovny testovaci kod na ctrl+c zvysoka kasle a 
aplikacia sa (s)proste zastavi. Pritom pomocou kill -TERM $pidProcesu sa 
aplikacia chova tak, ako ma ( vypise text a pokracuje dalej ).

Ako donutim jvm, aby sa spravala tak ako sa patri?

Diky.

class MyHandler implements SignalHandler {
public void handle(Signal s) {
System.out.println("catch signal " + s.toString());
}
}

class Main {
public static void main(String[] args) {
MyHandler h = new MyHandler();
Signal.handle(new Signal("TERM"), h);
for (int i = 0; i < 100; i++) {
System.out.println("sleep " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("exc");
}
}
System.out.println("end");
}
}





-- 
Dusan


Re: SIGTERM v Jave

2009-07-23 Thread Jozef Sevcik
Pokial sa nemylim, ctrl+c standardne zasiela SIGINT, nie SIGTERM

2009/7/23 Dusan Zatkovsky :
> Ahoj.
>
> Mam dost vazny problem so zachytavanim signalov v jave.
>
> V konzolovej aplikacii potrebujem garantovat, ze sa mi vykona urcity blok
> kodu. Akekolvek prerusenie vo vnutre tohoto bloku je povazovane za fatalnu
> chybu, ktoru treba potom rucne riesit. Tento blok sa vykonava cyklicky.
>
> Ja teraz potrebujem mat moznost tu aplikaciu rucne zastavit pomocou ctrl+c.
> Problem je, ze aj nasledovny testovaci kod na ctrl+c zvysoka kasle a
> aplikacia sa (s)proste zastavi. Pritom pomocou kill -TERM $pidProcesu sa
> aplikacia chova tak, ako ma ( vypise text a pokracuje dalej ).
>
> Ako donutim jvm, aby sa spravala tak ako sa patri?
>
> Diky.
>
> class MyHandler implements SignalHandler {
>    public void handle(Signal s) {
>        System.out.println("catch signal " + s.toString());
>    }
> }
>
> class Main {
>    public static void main(String[] args) {
>        MyHandler h = new MyHandler();
>        Signal.handle(new Signal("TERM"), h);
>        for (int i = 0; i < 100; i++) {
>            System.out.println("sleep " + i);
>            try {
>                Thread.sleep(1000);
>            } catch (InterruptedException e) {
>                System.out.println("exc");
>            }
>        }
>        System.out.println("end");
>    }
> }
>
>
>
>
>
> --
> Dusan
>



-- 
Jozef



Re: SIGTERM v Jave

2009-07-23 Thread Jozef Sevcik
predpokladam ze v kode ste zmenil new Signal("INT"), a handler sa aj
tak nevyvola ?

2009/7/23 Dusan Zatkovsky :
>> Pokial sa nemylim, ctrl+c standardne zasiela SIGINT, nie SIGTERM
>
> Ano, je to tak, ospravedlnujem sa.
>
> Takze kill -SIGINT $pid urobi presne to, co CTRL+C.
> Signal handler sa odignoruje.
>
>> 2009/7/23 Dusan Zatkovsky :
>> > Ahoj.
>> >
>> > Mam dost vazny problem so zachytavanim signalov v jave.
>> >
>> > V konzolovej aplikacii potrebujem garantovat, ze sa mi vykona urcity blok
>> > kodu. Akekolvek prerusenie vo vnutre tohoto bloku je povazovane za
>> > fatalnu chybu, ktoru treba potom rucne riesit. Tento blok sa vykonava
>> > cyklicky.
>> >
>> > Ja teraz potrebujem mat moznost tu aplikaciu rucne zastavit pomocou
>> > ctrl+c. Problem je, ze aj nasledovny testovaci kod na ctrl+c zvysoka
>> > kasle a aplikacia sa (s)proste zastavi. Pritom pomocou kill -TERM
>> > $pidProcesu sa aplikacia chova tak, ako ma ( vypise text a pokracuje
>> > dalej ).
>> >
>> > Ako donutim jvm, aby sa spravala tak ako sa patri?
>> >
>> > Diky.
>> >
>> > class MyHandler implements SignalHandler {
>> >    public void handle(Signal s) {
>> >        System.out.println("catch signal " + s.toString());
>> >    }
>> > }
>> >
>> > class Main {
>> >    public static void main(String[] args) {
>> >        MyHandler h = new MyHandler();
>> >        Signal.handle(new Signal("TERM"), h);
>> >        for (int i = 0; i < 100; i++) {
>> >            System.out.println("sleep " + i);
>> >            try {
>> >                Thread.sleep(1000);
>> >            } catch (InterruptedException e) {
>> >                System.out.println("exc");
>> >            }
>> >        }
>> >        System.out.println("end");
>> >    }
>> > }
>> >
>> >
>> >
>> >
>> >
>> > --
>> > Dusan
> --
> Dusan
>



-- 
Jozef


Re: SIGTERM v Jave

2009-07-23 Thread Dusan Zatkovsky
> Pokial sa nemylim, ctrl+c standardne zasiela SIGINT, nie SIGTERM

Ano, je to tak, ospravedlnujem sa.

Takze kill -SIGINT $pid urobi presne to, co CTRL+C.
Signal handler sa odignoruje.

> 2009/7/23 Dusan Zatkovsky :
> > Ahoj.
> >
> > Mam dost vazny problem so zachytavanim signalov v jave.
> >
> > V konzolovej aplikacii potrebujem garantovat, ze sa mi vykona urcity blok
> > kodu. Akekolvek prerusenie vo vnutre tohoto bloku je povazovane za
> > fatalnu chybu, ktoru treba potom rucne riesit. Tento blok sa vykonava
> > cyklicky.
> >
> > Ja teraz potrebujem mat moznost tu aplikaciu rucne zastavit pomocou
> > ctrl+c. Problem je, ze aj nasledovny testovaci kod na ctrl+c zvysoka
> > kasle a aplikacia sa (s)proste zastavi. Pritom pomocou kill -TERM
> > $pidProcesu sa aplikacia chova tak, ako ma ( vypise text a pokracuje
> > dalej ).
> >
> > Ako donutim jvm, aby sa spravala tak ako sa patri?
> >
> > Diky.
> >
> > class MyHandler implements SignalHandler {
> >    public void handle(Signal s) {
> >        System.out.println("catch signal " + s.toString());
> >    }
> > }
> >
> > class Main {
> >    public static void main(String[] args) {
> >        MyHandler h = new MyHandler();
> >        Signal.handle(new Signal("TERM"), h);
> >        for (int i = 0; i < 100; i++) {
> >            System.out.println("sleep " + i);
> >            try {
> >                Thread.sleep(1000);
> >            } catch (InterruptedException e) {
> >                System.out.println("exc");
> >            }
> >        }
> >        System.out.println("end");
> >    }
> > }
> >
> >
> >
> >
> >
> > --
> > Dusan
-- 
Dusan


Re: SIGTERM v Jave

2009-07-23 Thread Dusan Zatkovsky
On Thursday 23 of July 2009 10:35:54 Jozef Sevcik wrote:

Samozrejme ze nie, lebo som k Pycha predchadza pad.

Dakujem a ospravedlnujem sa.

> predpokladam ze v kode ste zmenil new Signal("INT"), a handler sa aj
> tak nevyvola ?


-- 
Dusan


Re: SIGTERM v Jave

2009-07-23 Thread Juraj Lutter

Dusan Zatkovsky wrote:

Ahoj.

Mam dost vazny problem so zachytavanim signalov v jave.

V konzolovej aplikacii potrebujem garantovat, ze sa mi vykona urcity blok 
kodu. Akekolvek prerusenie vo vnutre tohoto bloku je povazovane za fatalnu 
chybu, ktoru treba potom rucne riesit. Tento blok sa vykonava cyklicky.


Ja teraz potrebujem mat moznost tu aplikaciu rucne zastavit pomocou ctrl+c. 
Problem je, ze aj nasledovny testovaci kod na ctrl+c zvysoka kasle a 
aplikacia sa (s)proste zastavi. Pritom pomocou kill -TERM $pidProcesu sa 
aplikacia chova tak, ako ma ( vypise text a pokracuje dalej ).
  


ctrl+c generuje SIGINT, nie SIGTERM.

System V (Solaris): man signal.h, man termio


--
Juraj Lutter|  /\  ASCII Ribbon Campaign
otis (at) wilbury (dot) sk  |  \/  - NO HTML/RTF in e-mail
http://www.wilbury.sk/  |  /\  - NO Word docs in e-mail
JID: otis (at) jabber (dot) vx (dot) sk
!07/11 PDP a ni deppart m'I  !pleH