Re: 1.3, kernel 2.6, signals

nicole <[email protected]>
Newsgroups gmane.comp.java.linux.general
Message-ID <[email protected]>
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.
SignalTest.java (text/x-java, 2.3 KB)
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);
    }
  }
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.