Print

Print


The socket approach looks like it will do the trick.  Thanks.

On Sun, Jun 1, 2008 at 1:21 PM, Sean Luke <[log in to unmask]> wrote:
You'd need to implement it yourself.  Another approach you could do is have it listen on a port and flag a variable to inform you that you should die when an accept occurs.  Maybe create a thread like this:

public boolean pleaseDie = false;
public void makeKill()
       {
       Thread t = new Thread(new Runnable()
               {
               public void run()
                       {
                       StreamSocket sock = new StreamSocket(5000);
                       sock.accept();
                       pleaseDie = true;  // don't bother to synchronize
                       }
               });
       t.start();
       }

Then to die you could just do:

       telnet localhost 5000

Another approach you could use is to interrupt the control-c signal in Unix.  Java can't trap signals by default.  But googling for "Java signals" gives lots of stuff on how to handle it using JNI.  Not a happy approach, but...

Sean



On Jun 1, 2008, at 12:36 PM, Shane wrote:

Okay.  Is there an external way to send a running ecj process a message to stop?

Here is an simple example of how I could do this:
I could have ecj poll periodically for a file named "stop.txt" on the filesytem and if it exists, it would call Evolve.cleanup(state) and System.exit(0).  Then anytime I want to stop ecj, I just create the stop file and then delete it after ecj has stopped.

Is there currently a way to stop ecj using a similar technique or do I need to implement this myself?  Also, if I need to do this myself, can you think of a better way to do it than the example above?