SIGTERM v Jave
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
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
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
> 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
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
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