On 17 March 2010 20:40, Lee Spector <lspec...@hampshire.edu> wrote:
>
> Thanks Richard.
>
> The SIGQUIT thing sounds potentially useful, but when I send a SIGQUIT to the 
> stuck (looping) java process it has no effect. I've tried sending SIGQUIT via 
> the Max OS X Activity Monitor and also kill -3, kill -s SIGQUIT, and kill 
> -SIGQUIT with the process ID from a terminal window. I know that kill -9 will 
> kill it but I get no thread info. The other signals I've tried are all either 
> ignored or uninformative.

I didn't know about it before Richard mentioned it, but it does seem
to work.  I tried both on Linux and OS X.

e.g. in one terminal:

$ java -cp clojure.jar clojure.main

Then in another:

$ ps ax | grep java

Find the PID and then:

$ kill -QUIT <the_PID>

and I get something like this:

Full thread dump Java HotSpot(TM) Server VM (1.5.0_13-119 mixed mode):

"Low Memory Detector" daemon prio=5 tid=0x0020a700 nid=0x81ca00
runnable [0x00000000..0x00000000]

"CompilerThread1" daemon prio=9 tid=0x00209c30 nid=0x81bc00 waiting on
condition [0x00000000..0xb0c093b8]

"CompilerThread0" daemon prio=9 tid=0x00209670 nid=0x81ae00 waiting on
condition [0x00000000..0xb0b87f48]

"AdapterThread" daemon prio=9 tid=0x00209080 nid=0x815e00 waiting on
condition [0x00000000..0x00000000]

"Signal Dispatcher" daemon prio=9 tid=0x00208c30 nid=0x808600 waiting
on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=8 tid=0x00208350 nid=0x819c00 in Object.wait()
[0xb0a05000..0xb0a05d90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x07851580> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x07851580> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00207f50 nid=0x818e00 in
Object.wait() [0xb0984000..0xb0984d90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x07851600> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:474)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x07851600> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=0x00201370 nid=0xb0801000 runnable [0xb07ff000..0xb0800148]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
        at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:265)
        at clojure.main$skip_whitespace__5866.invoke(main.clj:70)
        at clojure.main$repl_read__5869.invoke(main.clj:91)
        at clojure.main$repl__5879$read_eval_print__5887.invoke(main.clj:181)
        at clojure.main$repl__5879.doInvoke(main.clj:200)
        at clojure.lang.RestFn.invoke(RestFn.java:422)
        at clojure.main$repl_opt__5914.invoke(main.clj:254)
        at clojure.main$main__5940.doInvoke(main.clj:347)
        at clojure.lang.RestFn.invoke(RestFn.java:398)
        at clojure.lang.Var.invoke(Var.java:361)
        at clojure.lang.AFn.applyToHelper(AFn.java:161)
        at clojure.lang.Var.applyTo(Var.java:482)
        at clojure.main.main(main.java:37)

"VM Thread" prio=9 tid=0x002076a0 nid=0x809800 runnable

"VM Periodic Task Thread" prio=9 tid=0x0020b300 nid=0x81d800 waiting
on condition

"Exception Catcher Thread" prio=10 tid=0x002015f0 nid=0x80a800 runnable
java.io.IOException: Interrupted system call
user=>

I suppose if you've redirected stdout somewhere else it might not show
up where you expect it to.  e.g. maybe SLIME interferes somehow (just
guessing).

> On Java debuggers: Is there a particular one that I ought to try? I see a big 
> universe of these, but with most assuming a particular development 
> environment or other setup stuff that I wouldn't know how to do from 
> Clojure... Aside from minor dabbling I'm new to the Java universe.

I've never used a Java debugger, but VisualVM has been mentioned on
this list before.

http://java.sun.com/javase/6/docs/technotes/guides/visualvm/

I'm pretty sure others have been mentioned too, but I can't remember off hand.

-- 
Michael Wood <esiot...@gmail.com>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to