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); } } }