Pokial sa nemylim, ctrl+c standardne zasiela SIGINT, nie SIGTERM 2009/7/23 Dusan Zatkovsky <[email protected]>: > 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
