For processes, there is a https://github.com/Raynes/conch but I haven't used it yet so I don't know how mature it is.
On Wed, Jan 22, 2014 at 10:45 PM, Cedric Greevey <cgree...@gmail.com> wrote: > It's not safe if the thread is holding any locks. It *may* also leak > native resources if the thread is holding those, but native resources held > by a heap-allocated Java object are supposed to be cleaned up by the > finalizer if the object is GC'd, and I think Thread.stop properly removes > that thread's locals as root set objects for GC, so native leaking would > only happen if the thread held native resources directly in locals, which > would only happen if it was executing a native method at the time of the > stop. I don't know if the JVM/JNI has a safeguard against native leaks from > threads being aborted while in native code, but I'd be mildly surprised if > it did. > > Clojure threads will potentially be holding locks if they are using > locking, dosync, swap!, or pretty much any of the concurrency primitives in > Clojure. That *might* include Var lookups; I'm not sure (*dynamic* var > lookups involve ThreadLocal, which might use locks under the hood). Many > Java objects use locks somewhere under the hood as well -- certainly > everything in j.u.concurrent is suspect in that regard (and therefore, > swap! and many other Clojure concurrency primitives). > > I'd be very leery of playing around with Thread.stop in any circumstance > more complicated than the thread's .run method is doing a pure math loop or > something similar. If it touches Java libraries (outside of > java.lang.String, java.math, and other value types) or uses Clojure > primitives (and how is it supposed to join its results back into the bigger > picture without them?) then it's dangerous. If it is a tight loop of math > stuff then you can check for the interrupted flag. > > My recommendation? Stay far, far away from Thread.stop (and .suspend) and > sprinkle Thread.sleep(1)s here and there in the math (maybe every certain > number of iterations -- a millisecond is still a LONG time compared to > primitive arithmetic ops). That should cause the thread to die with an > InterruptedException if .interrupt is called on it. If the thread does any > blocking I/O (or blocking core.async/j.u.concurrent stuff) with any > frequency it should also go tits up pretty quickly if .interrupted. > > > On Wed, Jan 22, 2014 at 4:31 PM, Mark Engelberg > <mark.engelb...@gmail.com>wrote: > >> So I guess this gets back to my earlier question: when is it safe to >> terminate a thread? >> >> I know that I often hit Ctrl-C in the REPL to terminate a long running >> function, and I've never really worried about it screwing things up. >> >> >> On Wed, Jan 22, 2014 at 1:29 PM, Shantanu Kumar <kumar.shant...@gmail.com >> > wrote: >> >>> >>> >>> On Thursday, 23 January 2014 02:37:43 UTC+5:30, puzzler wrote: >>>> >>>> Is there a convenient way within Clojure to launch a Clojure function >>>> or Java call in a separate process as opposed to a separate thread? Only >>>> way I know of is to literally shell out to the command prompt and launch a >>>> new executable. >>>> >>> >>> There's ProcessBuilder and Runtime.exec stuff, but it will have the JVM >>> and Clojure initialization overhead anyway. >>> >>> http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html >>> >>> http://www.tutorialspoint.com/java/lang/runtime_exec_envp.htm >>> >>> Shantanu >>> >>> -- >>> -- >>> 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 >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >> >> -- >> -- >> 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 >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.