There's very few things you can safely do in a signal handler. Calling a julia function can potentially lead to code generation, GC, etc., all of which is bad news in a signal handler. That's why we need a first-class mechanism for this: install a Julia function as a handler and the system arranges for your function to be called when the interrupt happens, but safely.
On Tue, Jun 17, 2014 at 11:21 AM, Stephen Chisholm <sbchish...@gmail.com> wrote: > I like the idea of an interrupt handling mechanism. What do you see that > would make the signal/libc approach unreliable? > > > On Tuesday, 17 June 2014 12:18:11 UTC-3, Stefan Karpinski wrote: > >> That is very unlikely to be reliable, but it's cool that it works. I >> think that we probably should change SIGINT from raising a normal error to >> triggering some kind of interrupt handling mechanism (which can in turn >> raise an error by default). >> >> >> On Tue, Jun 17, 2014 at 10:41 AM, Stephen Chisholm <sbchi...@gmail.com> >> wrote: >> >>> I'm able to register a callback function using signal in libc, see the >>> code below. >>> >>> SIGINT=2 >>> >>> function catch_function(x) >>> println("caught signal $x") >>> exit(0)::Nothing >>> end >>> catch_function_c = cfunction(catch_function, None, (Int64,)) >>> ccall((:signal, "libc"), Void, (Int64, Ptr{Void}), SIGINT, >>> catch_function_c) >>> >>> while true >>> sleep(1) >>> end >>> >>> >>> >>> On Tuesday, 17 June 2014 09:24:43 UTC-3, Stephen Chisholm wrote: >>>> >>>> I'm able to catch the InterruptException with the code below when >>>> running in the REPL, but it doesn't seem to get thrown when running the >>>> code in a script. >>>> >>>> while true >>>> try sleep(1) >>>> println("running...") >>>> catch err >>>> println("error: $err") >>>> end >>>> end >>>> >>>> >>>> On Monday, 16 June 2014 18:30:36 UTC-3, Ivar Nesje wrote: >>>>> >>>>> SIGINT gets converted to a InterruptException, that can be caught in a >>>>> catch statement. If you happened to be in a ccall, you might cause your >>>>> program to be in a corrupt state and leak resources such as memory. >>>>> >>>>> I'm not sure how you can interact with other signals. >>>>> >>>> >>