Hi Nicole,

I tested your code. It works fine on my machine with 2.6.4. I
tested Sun JDK 1.3.1fcs, 1.3.1_10, 1.3.1_11, 1.4.2fcs, 1.4.2_03
and 1.5beta. SignalTest is able to catch HUP, TERM, INT.

That said, I'd like to point out that the Java level signal API
is private interface. Its sole purpose is to implement the shutdown
mechanism (see Runtime.addShutdownHook). The interface may change
or get dropped completely without notice in future JDK. So use at
your own risk. (If you really want to catch signals, it's better
to write JNI code; signals have well-defined behavior at C level,
but not at Java level).

regards,
-hui

nicole wrote:
Ah, the IBM JDK was holding the signals for the JVM, that explains why
that didn't work (had to use -Xrs).

Works with 2.6:
IBM 1.3.1-6 (with -Xrs)
Sun 1.4.2_03 (no -Xrs)

Does Not Work with 2.6:
Blackdown 1.3.1
Sun 1.3.1_10
Sun 1.3.1_11

Untested:
Blackdown 1.4.x
IBM 1.4.x

Everything tested works fine on a 2.4 kernel.

Attached is the test code that I am using to test the signals.

Feedback welcome... otherwise I am most likely going to test and switch to
the IBM 1.3.1-6 JRE.

Thanks!
-nicole

At 16:52 on Mar 17, nicole shook the earth with:


The IBM JRE did not appear to catch the signals at all, they get passed
right through and kill the application.

Once I have something that tests the signals exclusively, hopefully I can
test all three of the JVMs and see what happens.

At 12:13 on Mar 16, Tony Reix shook the earth with:


Hi Nicole,

{ ...
{ I will be constructing a basic application that just does the signal
{ handling similar to my application so I can use it to test.

Seems your problem is not easy to understand ...
Let us know when you have built such a basic application. At that
time we'll try to reproduce it there, probably with the Sun or IBM JVMs.
Did you try with IBM JVM ?

Thanks for helping stabilizing NPTL.


------------------------------------------------------------------------


package test;
import sun.misc.Signal;
import sun.misc.SignalHandler;
import java.io.*;

public class SignalTest implements SignalHandler
{
 public SignalTest()
 {
 }
 public static void main(String[] args)
 {
   SignalTest st = new SignalTest();
   st.run();
 }

 public void run()
 {
   System.out.println("Initializing Signals...");
   initSignals();
   System.out.println("Signals Initialized.");
   System.out.println("I'm going to sit here now while you try to kill me"
     + " (type exit to force quit)");

   BufferedReader _input = new BufferedReader(new InputStreamReader(System.in));
   String s = "foo";

   while(!(s.equals("exit")))
   {
     try
     {
         s = _input.readLine();
         s = s.trim();
     }
     catch(java.io.IOException e)
     {
          System.out.println("oops, I didn't expect that: " + e.toString());
     }
   }

   System.out.println("Exiting on user request.");
   System.exit(0);
 }

 protected void initSignals()
 {
   try
   {
     System.out.println("Initializing sig INT");
     Signal.handle(new Signal("INT"), this);
   }
   catch(IllegalArgumentException e)
   {
     // failed
     System.out.println("Signals Caught:" + e.toString());
   }

   try
   {
     System.out.println("Initializing sig HUP");
     Signal.handle(new Signal("HUP"), this);
   }
   catch(IllegalArgumentException e)
   {
     // failed
     System.out.println("Signals Caught:" + e.toString());
   }
   try
   {
     System.out.println("Initializing sig TERM");
     Signal.handle(new Signal("TERM"), this);
   }
   catch(IllegalArgumentException e)
   {
     // failed
     System.out.println("Signals Caught: " + e.toString());
   }

   try
   {
     System.out.println("Initializing sig USR1");
     Signal.handle(new Signal("USR1"), this);
   }
   catch(IllegalArgumentException e)
   {
     // failed
     System.out.println("Signals Caught: " + e.toString());
   }
 }

 public void handle(Signal sig)
 {
   System.out.println("Caught " + sig.toString() + " ("+sig.getNumber()+")");
   if(sig.toString().equals("SIGTERM"))
   {
     System.out.println("Caught sig TERM, exiting");
     System.exit(-1);
   }
 }
}



---------------------------------------------------------------------- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Reply via email to