SIGTERM v Jave
Jozef Sevcik
sevcik na styxys.com
Čtvrtek Červenec 23 10:35:54 CEST 2009
predpokladam ze v kode ste zmenil new Signal("INT"), a handler sa aj
tak nevyvola ?
2009/7/23 Dusan Zatkovsky <msk.conf na gmail.com>:
>> 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 <msk.conf na gmail.com>:
>> > 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
Další informace o konferenci Konference